根据Ruby Array documentation,只要数组的每个元素是另外两个元素的数组,就可以使用方法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的文档功能对我不起作用。
答案 0 :(得分:10)
答案 1 :(得分:7)
是的,它不支持低于Ruby 2.1的版本,如果你正在寻找替代品。试试这个
keys = [:foo, :bar]
vals = [1, 2]
Hash[*keys.zip(vals).flatten]
=> {:foo=>1, :bar=>2}
答案 2 :(得分:5)
如果to_h
尚未定义,则以下代码将使用@ engineermnky评论中的代码提供补丁数组并提供to_h
方法 - 即, 2.1之前的红宝石环境。
unless [].respond_to? :to_h
class Array
def to_h
Hash[self]
end
end
end
答案 3 :(得分:1)
Ruby 2.0不支持to_h方法。它在2.1及更高版本中可用