在Ruby中将键数组和值数组转换为哈希
我有两个这样的阵列:在Ruby中将键数组和值数组转换为哈希,ruby,arrays,hash,Ruby,Arrays,Hash,我有两个这样的阵列: 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
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
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]
另一种方法是将每个_与_索引一起使用:
hash = {}
keys.each_with_index { |key, index| hash[key] = values[index] }
hash # => {"a"=>1, "b"=>2, "c"=>3}
同样,也可以使用方法来完成。如果您使用的是Ruby版本>=2.1,您可以利用该方法,否则请使用您的老朋友
试试这个,这样后一个
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>
那么Hash[keys.zip(values)]呢?谢谢,zip方法可能就是我需要的。。。但是“Hash[zipped]”部分在Ruby 1.8.6中给了我一个错误:“ArgumentError:Hash的奇数个参数”。我就是想不出另一个简单的方法把“压缩”变成散列…嗯。我用的是1.8.7。看起来这可能是在1.8.7中引入的。我将编辑一个向后兼容的版本的答案。这很好。遗憾的是,在旧版本的Ruby中,您必须*并扁平化拉链:(
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>