基本的だけれども忘れがちな、配列をハッシュに変換する方法のメモ
配列の配列を変換 → Hash[ary]
or Array#to_h
[[key0, val0], [key1, val1], ...]
形式の配列をハッシュにする場合は、Hash[]
の引数にそのまま突っ込むか、素直にto_h
でOK
alist = [[1,"a"], [2,"b"], [3,["c"]]]
p Hash[alist] # => {1=>"a", 2=>"b", 3=>["c"]}
一次元配列を変換 → Hash[*key_and_value]
[key0, val0, key1, val1, ...]
形式の配列にはto_h
は使えません。
この場合はHash[]
で良いですが、上の場合と違い*
で引数を展開する必要があります
ary = [1,"a", 2,"b", 3,["c"]]
p Hash[*ary] # => {1=>"a", 2=>"b", 3=>["c"]}
Kernel#Hash
おまけで。
Kernel#Hash
というメソッドがありますが、これは引数をto_hash
で変換します(to_h
はしてくれない)。
Array
にはto_hash
メソッドは定義されていないので、今回は利用できません。
ただし、例外で空配列の場合のみ空のハッシュが返されます。
Hash([1,"a", 2,"b", 3,["c"]]) # => TypeError: can't convert Array into Hash
Hash([[1,"a"], [2,"b"], [3,["c"]]]) # => TypeError: can't convert Array into Hash
Hash([]) # => {}