在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>