Ruby Arrayのドキュメント のように、配列の各要素が2つの要素の別の配列である限り、配列をハッシュに変換するために使用できるメソッドto_h
があります。同じドキュメントからの以下の例
p [[:foo, :bar], [1, 2]].to_h
ただし、上記のコードを実行すると、次のエラーが発生します。
irb(main):001:0> p [[:foo, :bar], [1, 2]].to_h
NoMethodError: undefined method `to_h' for [[:foo, :bar], [1, 2]]:Array
from (irb):1
from E:/RubyInstall/bin/irb:12:in `<main>'
irb(main):002:0>
私のRubyバージョンは
C:\>Ruby -v
Ruby 2.0.0p247 (2013-06-27) [x64-mingw32]
Stackoverflowに関する別の質問に答えるためにこの手法を使用したかったのですが、Rubyの文書化された機能が機能しないため、今は行き詰まっています。
to_h
メソッドは、Rubyバージョン2.1以降でのみ使用できます。
ここでリリースノートを確認してください
はい、Ruby 2.1よりも低いバージョンではサポートされていません。代替手段をお探しの場合は、こちらをお試しください
keys = [:foo, :bar]
vals = [1, 2]
Hash[*keys.Zip(vals).flatten]
=> {:foo=>1, :bar=>2}
次のコードは、to_h
がまだ定義されていない場合、つまり、2.1より前のRuby環境で、@ engineersmnkyのコメントに記載されているコードを使用して、配列にモンキーパッチを適用し、to_h
メソッドを提供します。
unless [].respond_to? :to_h
class Array
def to_h
Hash[self]
end
end
end
Ruby2.0はto_hメソッドをサポートしていません。 2.1以降で利用可能