2 flat logo on transparent 256
2018-04-14

初心者・独学者向け|Rubyのハッシュ入門とよく使うメソッド

Woman 0fsd

プログラミング言語でHashは必ず出てくる重要な処理です。 今回はプログラミング言語のRubyでのHash作成や新規作成 変更などの方法を解説します。

関連記事:初心者・独学者向け|Rubyの配列処理の入門とよく使うメソッド

そもそもHashとは

{Key=>値}のようにハッシュの中にKeyと値をペアをセットで格納する物をHashといいます。Hash.newや{}を使うと空ハッシュ生成され、その中に値を登録できます。またハッシュから値を取り出したり、値を追加したりする事も可能です

Hashで値を取り出す。

値を取り出すには[key]で取得します。 存在しないkeyを取得しようとするとnilが返ってきます。

Keyを設定するにはkeyを""をダブルクオートか''シングルクオートで囲います。

 a = {"test"=>1,""=>2}
=> {"test"=>1, ""=>2}

 a[""]
=> 2

 a["11"]
=> nill

また、Keyを設定するには:でも設定可能です。

 a = {:test=>1,:1=>2}
=> {"test"=>1, ""=>2}

 a[""]
=> 2

またKeyと値のペアを=>ではなくシンボル(:)で設定する事も可能です。 ※値の取り出し方に=>で設定する場合と違いはありません

a = {tes:1,:2}
=> {:tes=>1, :1=>2}

.keysでHashのkeyを取り出す

animals = { "" => 2, "ライオン" => 5, "トラ" => 9 }
=> {""=>2, "ライオン"=>5, "トラ"=>9}
animals.keys
=> ["", "ライオン", "トラ"]

.valuesでHashの値を取り出す

animals = { "" => 2, "ライオン" => 5, "トラ" => 9 }
=> {""=>2, "ライオン"=>5, "トラ"=>9}
animals.values
=> [2, 5, 9]

.lengthか.sizeでHashのKeyと値のペアの数を数える

animals = { "" => 2, "ライオン" => 5, "トラ" => 9 }
=> {""=>2, "ライオン"=>5, "トラ"=>9}
animals.size
=> 3
animals.length
=> 3

.storeか[]=でHashの値を追加する

hashへKeyと値を追加する場合は[]=かstoreメソッドを利用します。

[]=を利用する場合

price = { "みかん" => 150, "りんご" => 160, "もも" => 190}
=> {"みかん"=>150, "りんご"=>160, "もも"=>190}
price["バナナ"] = 123
=> 123
price["バナナ"]
=> 123

storeメソッドを利用する場合

price = { "みかん" => 150, "りんご" => 160, "もも" => 190}
=> {"みかん"=>150, "りんご"=>160, "もも"=>190}
price.store("バナナ", 175)
=> 175
price["バナナ"]
=> 175

ちなみに既に存在するkeyに値を追加しようとすると 値が上書きされます。

price = { "みかん" => 150, "りんご" => 160, "もも" => 190}
=> {"みかん"=>150, "りんご"=>160, "もも"=>190}
price["バナナ"] = 123
=> 123
price["バナナ"]
=> 123
price["バナナ"] = 1231
=> 1231
price["バナナ"]
=> 123

deleteメソッドでHashのKeyと値を追加する

deleteメソッドでkeyを指定するとkeyと値が削除されます。 keyが見つからないときはnilを返します。

price = { "みかん" => 150, "りんご" => 160, "もも" => 190}
=> {"みかん"=>150, "りんご"=>160, "もも"=>190}
price.delete("みかん")
=> 150
price
=> {"りんご"=>160, "もも"=>190}
price.delete("みかん")
=> nil

delete_ifで指定条件で複数のKeyと値を削除

delete_ifでは、指定条件を指定してKeyと値を一括で削除できます。 以下では値が170未満の値とkeyを削除します。

price = { "大根" => 50, "人参" => 160, "お肉" => 190}
=> {"大根"=>50, "人参"=>160, "お肉"=>190}
 price.delete_if {|key, val| val < 170 }
=> {"お肉"=>190}
price
=> {"お肉"=>190}

selectメソッドで指定条件に合致するKeyと値を表示する

あくまで表示するだけなので、指定条件に合致したKeyと値が削除されるわけではありません

以下では数字の3以上の値を表示する際の条件です。

man = { '田中' => 1, 'ヤマダ' => 2, '佐藤' => 3, '西村' => 4 }
=> {"田中"=>1, "ヤマダ"=>2, "佐藤"=>3, "西村"=>4}
man.select {|k, v| v >= 3 }
=> {"佐藤"=>3, "西村"=>4}
#再度変数manを表示しても1行目に設定されたKeyと値が表示される

 man
=> {"田中"=>1, "ヤマダ"=>2, "佐藤"=>3, "西村"=>4}

to_aメソッドでハッシュを配列化

.to_aメソッドを利用すれば、ハッシュのkeyと値が入った配列を2次元配列として返します。

man = { :ben => 170, :jhon => 190, :dan => 200}
p man.to_a

#実行結果
#
[[:ben, 170], [:jhon, 190], [:dan, 200]]

to_hメソッドで2次元配列をハッシュ化する

to_hメソッドで2次元配列をハッシュ化します。

※Ruby 2.1.0からのメソッドとなります。

fruit =[["りんご", 200], ["マンゴー", 140], ["ぶどう", 200]]
p fruit.to_h

#実行結果
# {"りんご"=>200, "マンゴー"=>140, "ぶどう"=>200}

その他プログラミング言語では配列もよく利用されます。 Rubyの配列処理についての入門記事は下記になります。

関連記事

Rubyの練習問題:ハッシュ編|初心者・独学者向け入門コンテンツ

Rubyの練習問題:配列編|初心者・独学者向け入門コンテンツ

Rubyの練習問題:文字列編|初心者・独学者向け入門コンテンツ

初心者・独学者向け|Rubyの配列処理の入門とよく使うメソッド

初心者・独学者向け|RubyのStringクラスとよく使うメソッド

Ruby技術者認定試験 (Silver version 2.1)対策 | !が付かない破壊的メソッド

Rubyの資格試験|Ruby技術者認定試験 (Silver version 2.1)の解説と対策概要

初心者・独学者向け|Rubyのinitializeメソッドとは

Rubyの繰り返し処理の解説|初心者・独学者向け

前の記事
次の記事