こんにちは、学生アルバイトのkoyamaです。

今回はRubyのHashクラスについてお話したいと思います。

クローリング会社のお仕事だと特にそうですが、データを扱う時に必ずと言ってもいいほど出てくるハッシュには、意外と使っていない便利なメソッドがたくさんあります。

今回はその中でも個人的に使いやすいと思ったメソッドを紹介します。

便利メソッドたち

1 zip

zipは2つの配列を1つのHashに収めます。

いきなりタイトルに反するarrayのクラスでご紹介ですが、ArrayのHash化でよく利用されるのでHash関連クラスのメソッドということでご容赦ください。2つのデータを配列で別々に取り、1つはハッシュのキー、もう一つはハッシュの値と言う風にまとめる時にすごく便利です。

key_arrey = [ "key1", "key2", "key3"]
value_arrey = [ "value1", "value2", "value3"]
result_hash = Hash[key_arrey.zip(value_arrey)]
p result_hash
#=> {"key1"=>"value1", "key2"=>"value2", "key3"=>"value3"}

2 values_at

values_atはハッシュをキーで検索し、キーに対応した値を配列として返します。

欲しい値を一気に取得したい時に便利です、配列として帰ってくるのでeachで取り出して使えるので使い勝手がいい様に思えます。

p result_hash.values_at("key1","key3")
#=> ["value1", "value3"]

3 transform_values

transform_valuesはハッシュの値をそれぞれ置き換え、値を置き換えた後のハッシュを返します。

時間情報を値に持つハッシュがあり、元の形を崩さずに緯度経度でのズレを書き加えたい時などに使えます。

time_hash = {"午前0時" => "00:00:00", "正午" => "12:00:00", "午後8時" => "20:00:00"}
p time_hash.transform_values {|value| value + " +0900" }
#=> {"午前0時"=>"00:00:00 +0900", "正午"=>"12:00:00 +0900", "午後8時"=>"20:00:00 +0900"}

最後に

今回紹介したメソッドはほんの少しですが、他にもハッシュを配列に平坦化したり、ハッシュを読みやすい形に直したりするメソッドがあったりします。

この記事を書いている途中でHashクラスについて調べていくうちに、バラエティに富んでいる部分にとても驚かされました。