首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将键数组和值数组转换为Ruby中的散列

将键数组和值数组转换为Ruby中的散列
EN

Stack Overflow用户
提问于 2009-04-11 20:30:11
回答 3查看 15.7K关注 0票数 20

我有两个这样的数组:

代码语言:javascript
复制
keys = ['a', 'b', 'c']
values = [1, 2, 3]

在Ruby中有没有一种简单的方法可以将这些数组转换成下面的哈希?

代码语言:javascript
复制
{ 'a' => 1, 'b' => 2, 'c' => 3 }

这是我的方法,但我觉得应该有一个内置的方法来轻松地做到这一点。

代码语言:javascript
复制
def arrays2hash(keys, values)
  hash = {}
  0.upto(keys.length - 1) do |i|
      hash[keys[i]] = values[i]
  end
  hash
end
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-11 20:41:32

以下内容在1.8.7中有效:

代码语言:javascript
复制
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)。以下代码应该是向后兼容的:

代码语言:javascript
复制
Hash[*keys.zip(values).flatten]
票数 55
EN

Stack Overflow用户

发布于 2009-04-12 09:04:48

另一种方法是使用each_with_index:

代码语言:javascript
复制
hash = {}
keys.each_with_index { |key, index| hash[key] = values[index] }

hash # => {"a"=>1, "b"=>2, "c"=>3}
票数 10
EN

Stack Overflow用户

发布于 2015-08-13 16:21:22

试试看,这样后一个d会覆盖前一个c

代码语言:javascript
复制
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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/740732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档