「ハッシュをもっと上手に使いこなしたい」という方向けの記事になっております
ハッシュがまだ理解できていないという方は、こちらを見てみてください
目次
目次
ハッシュの作成
#構文
{キー1 => 値1, キー2 => 値2, キー3 => 値3}
#構文(シンボル)
{キー1: 値1, キー2: 値2, キー3: 値3}
例:
#
{"name"=>"田中", "age"=>25, "gender"=>"男"}
#シンボル
{name: "田中", age: 25, gender: "男"}
初めから{}の中に値を記載して作ることができます
空のハッシュの作り方
#空のハッシュ作成
hash = {}
#空のハッシュ作成
hash = Hash.new
=> {}
{}だけを記載、Hash.newとしても空のハッシュを作る事ができます
ハッシュに値を追加
#構文
ハッシュ[キー] = 値
例:
#ハッシュに追加
user = {name: "田中", age: 25, gender: "男"}
user[:job]="教師"
=> {:name=>"田中", :age=>25, :gender=>"男", :job=>"教師"}
ハッシュの値を上書き
#構文
ハッシュ[キー(すでに存在する)] = 値
例:
#ハッシュに上書き
user = {name: "田中", age: 25, gender: "男", job: "教師"}
user[:job]="医者"
=> {:name=>"田中", :age=>25, :gender=>"男", :job=>"医者"}
ハッシュから取り出し
#構文
ハッシュ[キー]
例:
#ハッシュから取り出し
user = {name: "田中", age: 25, gender: "男", job: "医者"}
user[:job]
=> "医者"
#ハッシュから取り出し(存在しない)
user = {name: "田中", age: 25, gender: "男", job: "医者"}
user[:hobby]
=> nil
存在しないものを取り出すとnilになります
ハッシュから繰り返し(eachメソッド)で取り出し
#eachメソッドで繰り返し取得
user = {name: "田中", age: 25, gender: "男", job: "医者"}
user.each do |key_value|
p key_value
end
#キーだけ取得
user.each do |key_value|
puts key_value[0]
end
結果:
[:name, "田中"]
[:age, 25]
[:gender, "男"]
[:job, "医者"]
name #ここからkey_value[0]で取得した値
age
gender
job
eachメソッドをハッシュに使うと、
[:name,"田中"]のように配列として取得します。
配列は「0、1」とインデクス番号で管理されているため、
key_value[0]と指定すると[:name,"田中"]の0番であるnameつまりハッシュのキーが取得できます
ではkey_value[1]ではどうなるか
#eachメソッドで繰り返し取得
user = {name: "田中", age: 25, gender: "男", job: "医者"}
user.each do |key_value|
p key_value
end
#値だけ取得
user.each do |key_value|
puts key_value[1]
end
結果:
[:name, "田中"]
[:age, 25]
[:gender, "男"]
[:job, "医者"]
田中 #ここからkey_value[1]で取得した値
25
男
医者
値を取り出すことができます
|ブロック引数|を2つ指定すると、キーと値を順番に取り出す事ができます
|key,value|と2つ指定して取り出して見ましょう!
#|ブロック引数|の部分を2つ指定
user = {name: "田中", age: 25, gender: "男", job: "医者"}
user.each do |key,value|
puts "キー→#{key},値→#{value}"
end
結果:
キー→name,値→田中
キー→age,値→25
キー→gender,値→男
キー→job,値→医者
ハッシュの中の要素を削除
deleteメソッド
deleteメソッドを使うと要素を削除できます
#name要素を削除
user = {name: "田中", age: 25, gender: "男", job: "医者"}
user.delete(:name)
puts user
結果:
=>{:age=>25, :gender=>"男", :job=>"医者"}
name要素が削除されました
ハッシュの中を調べる
has_key?メソッド
ハッシュの中にキーが存在するか?を調べます
#キーを調べる
user = {name: "田中", age: 25, gender: "男", job: "医者"}
puts user.has_key?(:name)
puts user.has_key?(:hoge)
結果:
true #nameのキーはあるのでtrue
false #hogeのキーは無いのでfalse
ハッシュの中を検索する
findメソッド
findメソッドは指定した要素がhashの中にあるのか?を調べてくれます
ただ、一番初めに検索に引っかかった値を返してくれるので注意です!
#構文
ハッシュ.find { |ブロック変数| 条件 }
#実際にキーで検索する
user = {name: "田中", age: 25, gender: "男", job: "医者"}
p user.find{|key,value| key == :age}
結果:
[:age, 25]
#実際に値で検索する
user = {name: "田中", age: 25, gender: "男", job: "医者"}
p user.find{|key,value| value == "男"}
結果:
[:gender, "男"]
#一番初めに引っかかった値を返す
ages = {age: 25, age2: 25, age3: 25}
p ages.find{|key,value| value == 25}
結果:
[:age, 25] #一番初めに引っかかった値を返す