ハッシュの使い方を深掘りしよう【Ruby/hash】

mycompilerでコード編集からコンパイル、実行まで行えます。

このページでは、Rubyの基本的なデータ操作の手法である『hash』の使い方を学びましょう。

簡単におさらいしますが、ハッシュはデータ(値)に任意の名前(キー)を付けて管理できるコードで、配列のように扱えます。

格納するデータが複数種類ある時、データ名を付けて管理したい時があれば積極的に使いましょう。

ハッシュの構文、出力の方法

まずはハッシュの構文です。

ハッシュは『ハッシュ名={“データ名1″=>”データ1”,”データ名2″=>”データ2”,”データ名3″=>”データ3”,…}』のように記述し、『print ハッシュ名』で全てのデータ出力が行えます。

また、『print ハッシュ名[“データ名”]』で該当するデータのみ出力も可能です。

#ハッシュの構文、出力

week = {
  "Weekday"=>"monday.tuesday.wednesday.thursday.friday",
  "holiday"=>"sunday.saturday"
}
print("ハッシュの中身を全て出力\n")
print week,"\n"
print("ハッシュから特定のデータを出力\n")
print week["holiday"]
#出力結果

ハッシュの中身を全て出力
{"Weekday"=>"monday.tuesday.wednesday.thursday.friday", "holiday"=>"sunday.saturday"}
ハッシュから特定のデータを出力
sunday.saturday

配列をハッシュに変換する

配列をハッシュに変更するには『Hash[*配列名]』を使います。

#配列をハッシュに変換

week = [
  "Weekday","monday.tuesday.wednesday.thursday.friday",
  "holiday","sunday.saturday"
]
ex=Hash[*week]
print ex
#出力結果

{"Weekday"=>"monday.tuesday.wednesday.thursday.friday", "holiday"=>"sunday.saturday"}

ここで、配列の要素は1から順にハッシュに変換されることに注意しましょう。

配列に不要な要素が混ざっているとハッシュのキー(データ名)と値(データ)がずれてしまいます。

ハッシュにデータを追加する

ハッシュに新しいデータを追加するには『ハッシュ名=[“データ名”]=”データ”』を記述します。

新しいデータはハッシュの最後に追加されます。

#ハッシュにデータを追加

week = {
  "Weekday"=>"monday.tuesday.wednesday.thursday.friday",
  "holiday"=>"sunday.saturday"
}
week["one week"]="7days"
print week
#出力結果

{"Weekday"=>"monday.tuesday.wednesday.thursday.friday", "holiday"=>"sunday.saturday", "one week"=>"7days"}

ハッシュのデータを変更する

ハッシュのデータを新しい値に上書きするためには、データ追加と同じ『ハッシュ名=[“データ名”]=”データ”』を使います。

既存のデータ名を選択することで、最後に記述した名前に上書きされます。

#ハッシュのデータを変更

week = {
  "Weekday"=>"monday.tuesday.wednesday.thursday.friday",
  "holiday"=>"sunday.saturday"
}
week["one week"]="6days"
print("修正前\n")
print week,"\n"
week["one week"]="7days"
print("修正後\n")
print week
#出力結果

修正前
{"Weekday"=>"monday.tuesday.wednesday.thursday.friday", "holiday"=>"sunday.saturday", "one week"=>"6days"}
修正後
{"Weekday"=>"monday.tuesday.wednesday.thursday.friday", "holiday"=>"sunday.saturday", "one week"=>"7days"}

ハッシュにリストを追加する

上で解説したデータ追加の手法『ハッシュ名=[“データ名”]=”データ”』を使うことで、データの代わりにリストを追加することができます。

データを記述していた箇所にリストを記述してあげるだけです。

#ハッシュにリストを追加

week = {
  "Weekday"=>"monday.tuesday.wednesday.thursday.friday",
  "holiday"=>"sunday.saturday"
}
add=["7days","168hours"]
week["one week"]=add
print week
#出力結果

{"Weekday"=>"monday.tuesday.wednesday.thursday.friday", "holiday"=>"sunday.saturday", "one week"=>["7days", "168hours"]}

ハッシュのデータを任意の形で出力する

ハッシュの出力形式を任意の形に変更するためには、eachメゾッド『ハッシュ名.each do |キーの変数,値の変数|』を利用します。

『print』で出力したい形式を記述し、eachメゾッドの終了時には『end』を書きます。

これでハッシュの要素の数だけ、データ出力が行われます。

#ハッシュのデータを任意の形で出力

week = {
  "Weekday"=>"monday.tuesday.wednesday.thursday.friday",
  "holiday"=>"sunday.saturday"
}

week.each do |type,items|
print type+" : "+items+"\n"
end
#出力結果

Weekday : monday.tuesday.wednesday.thursday.friday
holiday : sunday.saturday

ハッシュの中身を配列で取得

ハッシュの中身を配列に変換するには、『ハッシュ名.to_a』を使います。

配列内に配列が格納される出力形式になります。

#ハッシュの中身を配列で取得

week = {
  "Weekday"=>"monday.tuesday.wednesday.thursday.friday",
  "holiday"=>"sunday.saturday"
}

print week.to_a
#出力結果

[["Weekday", "monday.tuesday.wednesday.thursday.friday"], ["holiday", "sunday.saturday"]]

ハッシュの中身をキー、値ごとに取得

ハッシュの中身をキー、値ごとに出力させるには『each_key do |キーの変数|』『each_value do |値の変数|』を使います。

また、キーや配列をそれぞれ配列形式で出力するためには『ハッシュ名.keys』『ハッシュ名.values』を使います。

最後にsが付くことに注意しましょう。

#ハッシュの中身をキー、値ごとに取得

week = {
  "Weekday"=>"monday.tuesday.wednesday.thursday.friday",
  "holiday"=>"sunday.saturday"
}

print "キーを全て取得\n"
week.each_key do |key|
    print key,"\n"
end

print "値を全て取得\n"
week.each_value do |value|
    print value,"\n"
end

print "キーを配列で取得\n"
print week.keys,"\n"

print "値を配列で取得\n"
print week.values,"\n"
#出力結果

キーを全て取得
Weekday
holiday
値を全て取得
monday.tuesday.wednesday.thursday.friday
sunday.saturday
キーを配列で取得
["Weekday", "holiday"]
値を配列で取得
["monday.tuesday.wednesday.thursday.friday", "sunday.saturday"]

ハッシュのキー、値を入れ替える

ハッシュ内のキーと値を入れ替えるには『ハッシュ名.invert』を使います。

以下の例文を参照してください。

#ハッシュのキー、値を入れ替える

week = {
  "Weekday"=>"monday.tuesday.wednesday.thursday.friday",
  "holiday"=>"sunday.saturday"
}

print week.invert
#出力結果

{"monday.tuesday.wednesday.thursday.friday"=>"Weekday", "sunday.saturday"=>"holiday"}

複数のハッシュを統合する

複数のハッシュを統合するときは『ハッシュ1.merge(ハッシュ2,ハッシュ3,…)』を使います。

#ハッシュの統合

hash1 = {"key1"=>"data1"}
hash2 = {"key2"=>"data2"}
hash3 = {"key3"=>"data3"}

print "hash1のみ出力\n"
print hash1,"\n"
print "hash1+hash2を出力\n"
print hash1.merge(hash2),"\n"
print "hash1+hash2+hash3を出力\n"
print hash1.merge(hash2,hash3)
#出力結果

hash1のみ出力
{"key1"=>"data1"}
hash1+hash2を出力
{"key1"=>"data1", "key2"=>"data2"}
hash1+hash2+hash3を出力
{"key1"=>"data1", "key2"=>"data2", "key3"=>"data3"}

ハッシュのサイズを取得

ハッシュにいくつのデータが入っているか確認する際には『ハッシュ名.length』を使います。

#ハッシュのサイズを取得

week = {
  "Weekday"=>"monday.tuesday.wednesday.thursday.friday",
  "holiday"=>"sunday.saturday"
}

print week.length
#出力結果

2

以上がRubyのハッシュで使われる基本的なコードになります。

使用頻度の高いものを中心に紹介しているのでマスターしてください。

コメント