スポンサーリンク
ハッシュ(Hash)とは
ハッシュというのは、keyとvalueの組み合わせの配列。辞書リスト。
定義方法は以下。
1 | {key1=>value1, key2=>value2} |
key、valueともに文字列でも数値でも良い。
ハッシュ名[key]でそのvalueを参照できる。
1 2 3 4 | tests = {"数学"=>95, "国語"=>70, "英語"=>90, "理科"=>87, "社会"=>65} puts tests["数学"] #=> 95 puts tests["理科"] #=> 87 |
スポンサーリンク
ハッシュの要素数
ハッシュの要素数はsizeまたはlenghメソッドで取得できる。
1 2 3 | tests = {"数学"=>95, "国語"=>70, "英語"=>90, "理科"=>87, "社会"=>65} puts tests.size #=> 5 |
キーにシンボルを使う書き方
ハッシュのキーにシンボルを使う書き方もある。
1 2 3 4 | tests = {数学: 95, 国語: 70, 英語: 90} puts tests[:数学] #=> 95 puts tests[:国語] #=> 70 |
これは見やすくていい!日本語でも大丈夫なのが驚き。
シンボルについて詳しくはRailsでよく出てくるコロン(:)は、シンボルって言うやつらしいを参照。
ハッシュの繰り返し処理
普通の配列に使うeachメソッドというのがある。
1 2 3 4 5 6 7 | ["数学", "国語", "英語"].each do |value| puts value end #=> 数学 #=> 国語 #=> 英語 |
見ての通り、eachメソッドはレシーバの配列の各要素を順番に取り出して処理する為のメソッド。
このeachメソッドをハッシュに使うと、何が取り出せるかと言うと、
1 2 3 4 5 6 7 | {数学: 95, 国語: 70, 英語: 90}.each do |value| p value end #=> [:数学, 95] #=> [:国語, 70] #=> [:英語, 90] |
ハッシュの各要素を[key, value]という配列の形で取り出すことが出来る。
以下のように、doブロックの中の変数を2つ用意すれば、keyとvalueを別々に取り出すことも出来る。
※もちろん変数名は何でも良い
1 2 3 4 5 6 7 | {数学: 95, 国語: 70, 英語: 90}.each do |key, value| puts "#{key}は#{value}点" end #=> 数学は95点 #=> 国語は70点 #=> 英語は90点 |
このようにハッシュの各要素を順に回しながら操作するにはeachメソッドで事足りるのだが、一応、ハッシュ専用の繰り返し処理用メソッドが3つ用意されている。
- each_key
- 各要素のkeyを取得しながら処理を繰り返す。
- each_value
- 各要素のvalueを取得しながら処理を繰り返す。
- each_pair
- 各要素のkeyとvalueをセットで取得しながら処理を繰り返す。
※eachと名前が違うだけで動きは全く同じ
1 2 3 4 5 6 7 8 | {数学: 95, 国語: 70, 英語: 90}.each_key do |key| puts key end #実行結果 #数学 #国語 #英語 |
1 2 3 4 5 6 7 8 | {数学: 95, 国語: 70, 英語: 90}.each_value do |value| puts value end #実行結果 #95 #70 #90 |
1 2 3 4 5 6 7 8 | {数学: 95, 国語: 70, 英語: 90}.each_pair do |key, value| puts "#{key}は#{value}点" end #実行結果 #数学は95点 #国語は70点 #英語は90点 |