Ruby

【Ruby入門】ハッシュをマスターできる【使い方まとめ】

※当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

 

ひでまる
ひでまる
ひでまるです!今回はハッシュの使い方をまとめていきます!

 

「ハッシュをもっと上手に使いこなしたい」という方向けの記事になっております

ハッシュがまだ理解できていないという方は、こちらを見てみてください

 

 

ハッシュの作成

#構文
{キー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]  #一番初めに引っかかった値を返す

 

-Ruby
-,