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]に渡す配列ですが、偶数個でしか受け取りません。
奇数個の配列を渡すと例外が発生します。