Edited at

ArrayからHashに変換する方法いろいろ

More than 1 year has passed since last update.


その1 キーとバリューが交互の配列

ary = [1, "ねずみ", 2, "うし", 3, "とら"]

h = Hash[*ary]

=>{1=>"ねずみ", 2=>"うし", 3=>"とら"}

配列を格納している変数aryの先頭に * をつけた場合、配列に入っている要素を全て代入する多重代入が行われます。


その2 キーとバリューのセットが配列になっている配列

ary = [[1, "ねずみ"], [2, "うし"], [3, "とら"]]

h = Hash[*ary.flatten]

=>{1=>"ねずみ", 2=>"うし", 3=>"とら"}

配列の中に配列が入っている場合flattenメソッドで平滑化すると、

=> [1, "ねずみ", 2, "うし", 3, "とら"]

このような配列(つまりその1と同じ)になります。


その3 キーとバリューがそれぞれ違う配列

key = [1, 2, 3]

value = ["ねずみ", "うし", "とら"]
ary = [key, value].transpose
h = Hash[*ary.flatten]

=>{1=>"ねずみ", 2=>"うし", 3=>"とら"}

配列が2つに分かれている場合、transposeメソッドで

=> [[1, "ねずみ"], [2, "うし"], [3, "とら"]]

このように、その2と同じ形になります。


参考

http://www.rubylife.jp/ini/hash_class/index7.html