このページでは、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のハッシュで使われる基本的なコードになります。
使用頻度の高いものを中心に紹介しているのでマスターしてください。
コメント