Rubyで配列からハッシュを作成する

たまに、配列になっているデータをハッシュに変えてしまいたい時があったりします。

data = [[0, 'データ1’], [1, 'データ2’], [2, 'データ3’], [3, 'データ4’], [4, 'データ5’]]

という感じのデータですね。

これをハッシュにするには、ゴリゴリやる場合

hash_data = {}
data.map{|c| hash_data[c[0]] = c[1]}

となりますが、別のやり方として

Hashの「self[*key_and_value] -> Hash」というメソッドを使ってみます。

Rubyのドキュメントにもあるのですが

Hashの[]メソッドとして定義されており

array_data = [a0, 'データ1’]
Hash[*array_data]という感じにすると、
{0 => 'データ1’}
というハッシュを作ってくれます。

所が、このメソッドは今回の例のdataの配列のような2重配列は対応していないので

ハッシュを作る際にhash_dataを平滑化する必要があります。

これを踏まえて最終的には

Hash[*data.flatten]

と書くと、良い感じにハッシュになります。

ちなみに、この時self[*key_and_value]に渡す配列ですが、偶数個でしか受け取りません。

奇数個の配列を渡すと例外が発生します。

Ruby

Posted by GENDOSU