我有两个这样的数组:
keys = ['a', 'b', 'c']
values = [1, 2, 3]
在Ruby中有没有一种简单的方法可以将这些数组转换成下面的哈希?
{ 'a' => 1, 'b' => 2, 'c' => 3 }
这是我的方法,但我觉得应该有一个内置的方法来轻松地做到这一点。
def arrays2hash(keys, values)
hash = {}
0.upto(keys.length - 1) do |i|
hash[keys[i]] = values[i]
end
hash
end
发布于 2009-04-11 20:41:32
以下内容在1.8.7中有效:
keys = ["a", "b", "c"]
values = [1, 2, 3]
zipped = keys.zip(values)
=> [["a", 1], ["b", 2], ["c", 3]]
Hash[zipped]
=> {"a"=>1, "b"=>2, "c"=>3}
这似乎不适用于老版本的Ruby (1.8.6)。以下代码应该是向后兼容的:
Hash[*keys.zip(values).flatten]
发布于 2009-04-12 09:04:48
另一种方法是使用each_with_index:
hash = {}
keys.each_with_index { |key, index| hash[key] = values[index] }
hash # => {"a"=>1, "b"=>2, "c"=>3}
发布于 2015-08-13 16:21:22
试试看,这样后一个d
会覆盖前一个c
irb(main):001:0> hash = Hash[[[1,2,3,3], ['a','b','c','d']].transpose]
=> {1=>"a", 2=>"b", 3=>"d"}
irb(main):002:0>
https://stackoverflow.com/questions/740732
复制相似问题