【Ruby】ハッシュの書き方と使い方の基本
開発環境
- Ruby version: ruby 3.1.2
Rubyのハッシュとは
Rubyのハッシュとは、任意の種類のオブジェクト(キー)から任意の種類のオブジェクト(値)への関連づけを行うことができるハッシュクラスです。 また、Rubyではハッシュと言いますが、他の言語では連想配列とも呼ばれることが多いです。 公式リファレンス:https://docs.ruby-lang.org/ja/latest/class/Hash.html
ハッシュのキー(key)と値(value)
配列では要素にインデックス番号が割り当てられていましたが、ハッシュでは値にキーを割り当てます。 そのため、ハッシュから要素を取り出したい場合は配列ではインデックス番号を指定しましたが、ハッシュではキーを指定することで値取り出すを取り出すことができます。 また、一つのハッシュの中に重複する同じキーを割り当てることはできないため、注意が必要です。
Rubyのハッシュの書き方
Rubyのハッシュの書き方をご紹介します。
ハッシュでリテラル表現を使用した書き方
Rubyのハッシュでリテラル表現を使用した書き方です。
1hash = {"key1" => "value1", "key2" => "value2", "key3" => "value3"}
リテラル表現{}の中でkeyとvalueを「=>」で関連付けを行い、要素を「,(カンマ)」で区切るように記述することでハッシュを作成することができます。
ハッシュでHashクラスを使用した書き方
RubyのハッシュでHashクラスを使用した書き方です。
1hash = Hash["key1" => "value1", "key2" => "value2", "key3" => "value3"]
ただ、Rubyのハッシュはリテラル表現を使用して記述されることが一般的です。
Rubyのハッシュを操作する基本
Rubyのハッシュを操作するために必要な基本を解説していきます。
ハッシュの初期化する
ハッシュの初期化は下記のように記述します。
1# リテラル表現で配列を初期化する 2hash = {} 3 4# Arrayクラスのnewメソッドで配列を初期化する 5hash = Hash.new()
リテラル表現、またはHashクラスのnewメソッドでハッシュを初期化することができます。 また、上記のような状態を空のハッシュを作成するとも言います。
ハッシュに要素を追加する
ハッシュに要素を追加するには下記のように記述します。
1# ハッシュに要素を追加する 2hash = {} 3hash["key1"] = "value1" 4hash["key2"] = "value2" 5hash["key3"] = "value3"
作成したハッシュオブジェクトに対してキーを指定して関連付けする値を代入することにより、新しい要素をハッシュオブジェクトに追加します。
ハッシュから要素の値を取得する
ハッシュから要素の値を取得するには下記のように記述します。
1# ハッシュから要素の値を取得する 2hash = {"key1" => "value1", "key2" => "value2", "key3" => "value3"} 3hash["key1"]
取り出したい値に関連付けられたキーを指定することにより、ハッシュの要素から値を取り出すことができます。
ハッシュの要素の値を更新する
ハッシュの要素の値を更新する場合は下記のように記述します。
1# ハッシュから要素の値を更新する 2hash = {"key1" => "value1", "key2" => "value2", "key3" => "value3"} 3hash["key3"] = "value3を更新"
ハッシュの値を更新したい要素のキーを指定することにより、キーに関連付けされた値を更新することができます。
ハッシュを連結する
ハッシュを連結する場合は下記のように記述します。
1# ハッシュを結合する 2hash1 = {"key1" => "value1", "key2" => "value2", "key3" => "value3"} 3hash2 = {"key4" => "value4", "key5" => "value5", "key6" => "value6"} 4hash3 = hash1.merge(hash2)
mergeメソッドでハッシュを連結させることができます。 ただし、同じキーが割り当てられている場合は、後者のほうで上書きされてしまうため、注意が必要です。
ハッシュの中に配列がある
ハッシュの中に配列があるパターンです。
1# ハッシュの中に配列がある 2daily_sales = { 3 "2023-02-01" => [3000,8000,4000,5000], 4 "2023-02-02" => [4000,3600,2000], 5 "2023-02-03" => [12000,1600,3600,4800,8200], 6} 7p daily_sales["2023-02-01"].sum
ハッシュのキーを指定することにより、キーに関連付けられた配列を取得することができます。
配列の中にハッシュがある
配列の中にハッシュがあるパターンです。
1# 配列の中にハッシュがある 2users = [ 3 {"name" => "山田 太郎", "sex" => "男性", "age" => 28}, 4 {"name" => "鈴木 一郎", "sex" => "男性", "age" => 36}, 5 {"name" => "佐藤 穂果", "sex" => "女性", "age" => 24}, 6] 7p users[1]["name"]
配列のインデックス番号を指定することでハッシュを取り出すことができ、ハッシュのキーを指定することにより値を取り出すことができます。
ハッシュの中にハッシュがある
ハッシュの中にハッシュがあるパターンです。
1# ハッシュの中にハッシュがある 2users = [ 3 {"name" => {"last" => "山田", "first" => "太郎"}, "sex" => "男性", "age" => 28}, 4 {"name" => {"last" => "鈴木", "first" => "一郎"}, "sex" => "男性", "age" => 36}, 5 {"name" => {"last" => "佐藤", "first" => "穂果"}, "sex" => "女性", "age" => 24}, 6] 7 8p users[0]["name"]["last"]
ハッシュのキーを指定することにより、ハッシュに関連付けられたハッシュを取得することができ、さらにキーを指定することにより値を取り出すことができます。
おわりに
Rubyのハッシュの使い方を解説してきました。 プログラミングではデータのやり取りにハッシュは必要不可欠なほどよく使われますが、基本的な操作ができるようになれば自由にデータを処理することができます。 最初は難しいかもしれませんが、ハッシュの基本的な使い方をマスターしていきましょう。