ハッシュとは?
キーと値の組み合わせでデータを管理するオブジェクトです。
イメージ
{ キー1: 値1, キー2: 値2, キー3: 値3 }
配列との違いは?
配列が要素を指定するのには、「0」から始まるインデックス番号を使用します。
それに対し、ハッシュは「キー」と呼ばれる任意の文字列を使用し、「バリュー」と呼ばれる要素を指定します。
about_taro = { name: "suzuki taro", age: 30, like: "apple", hobby: "swimming" }
puts about_taro[:name]
#==> suzuki taro
配列ではなくハッシュを使うメリットは?
1. コードの可読性が高い。
ハッシュは任意の文字列であるキーとの組み合わせにより、バリューがどういったものなのかが分かりやすいです。
#ハッシュの場合 キーにより、バリューが何の値段なのか分かります
ramen_menu = { syoyu: "750円", miso: "850円", sio: "700円", tonkotyu: "800円" }
#配列の場合 要素が何の値段なのか分かりません
ramen_menu = [ "750円", "850円", "700円", "800円" ]
2. 様々な種類の要素をまとめて扱える。
配列は基本的に同じカテゴリの要素をまとめるのに対し、ハッシュはキーの存在により、違ったカテゴリのバリューも可読性を保ってまとめることができます。
#ハッシュの場合 taroさんについて様々なカテゴリのバリューをまとめています
about_taro = { name: "suzuki taro", age: 30, like: "apple", hobby: "swimming", best_friend: "satoshi" }
#配列の場合 taroさんの[友達]という1つのカテゴリの要素をまとめています
taros_friends = [ "satoshi", "kojiro", "kasumi", "takeshi" ]
シンボルについて
コロン(:)に続けて任意の名前で定義されたオブジェクトをシンボルといいます。
:シンボル名
ハッシュのキーもシンボルであり、以前はハッシュロケット(=>)を用いた記法が多く使われていました。
about_taro = { :name => "suzuki taro", :age => 30, :like => "apple" }
しかし今はシンボルを使った新しい記法が主流になっています。
※この記法の場合は、シンボルのコロンの位置が後ろになります。
about_taro = { name: "suzuki taro", age: 30, like: "apple" }
ハッシュの扱い方
演習問題を通して、ハッシュを扱ってみましょう。
taro = { name: "suzuki taro", age: 30, like: "apple", hobby: "swimming" }
Q1 「30」を出力してください。
Q1解答
puts taro[:age]
#=> 30
ハッシュの中と外では、キーのコロンの位置が反対になります。
taro = { age: 30 }
puts taro[:age]
Q2 キー「from」 バリュー「"japan"」を追加してください。
Q2解答
taro[:from] = "japan"
#puts taro
#=> {:name=>"suzuki taro", :age=>30, :like=>"apple", :hobby=>"swimming", :from=>"japan"}
Q3 「"apple"」を「"orange"」に上書きしてください。
Q3解答
taro[:like] = "orange"
#puts taro
#=> {:name=>"suzuki taro", :age=>30, :like=>"orange", :hobby=>"swimming", :from=>"japan"}
Q4 「hobby: "swimming"」を削除してください。
Q4解答
taro.delete(:hobby)
#puts taro
#=> {:name=>"suzuki taro", :age=>30, :like=>"orange", :from=>"japan"}
Q5 ハッシュの要素の個数を調べてください。
Q5解答
taro.size
#=> 4
lengthメソッドでも同じ結果が得られます。
Q6 ハッシュのキーを配列として返してください。
Q6解答
taro.keys
#=> [:name, :age, :like, :from]
Q7 ハッシュの値を配列として返してください。
Q7解答
taro.values
#=> ["suzuki taro", 30, "orange", "japan"]
Q8 ハッシュの中に「:name」キーが存在するか確認してください。
Q8解答
taro.has_key?(:name)
#=> true
key?/include?/member?メソッドでも同じ結果が得られます。
終わりに
ハッシュはプログラミングの中で欠かせないオブジェクトです。
ぜひ使い方をマスターしましょう♬