将数组转换为哈希键

时间:2012-09-10 22:05:06

标签: ruby arrays hash

如何在没有0循环的情况下将数组转换为值为each的哈希值。

例如,给定此数组:

[1, 2, 3, 4]

我想得到这个哈希:

{"1"=>0, "2"=>0, "3"=>0, "4"=>0}

4 个答案:

答案 0 :(得分:8)

标准方法是Hash[...]

Hash[xs.map { |x| [x.to_s, 0] }]

Enumerable#mash如果您碰巧使用Facets。我想不出更简洁和陈述性的东西:

xs.mash { |x| [x.to_s, 0] }

答案 1 :(得分:4)

array.inject({}) { | a, e | a[e.to_s] = 0; a }

或以更干净的方式(感谢tokland,请参阅评论中的讨论)

array.inject({}) { | a, e | a.update(e.to_s => 0) }

答案 2 :(得分:2)

我是一个简单的粉丝,我永远无法记住事情#inject或Hash构造函数参数的工作原理。

array = [1, 2, 3, 4]
hash = {}

array.each do |obj|
  hash[obj.to_s] = 0
end

puts hash.inspect # {"1"=>0, "2"=>0, "3"=>0, "4"=>0}

答案 3 :(得分:0)

好吧,实际上,我会使用each_with_object,但发布此内容更有趣。

ary = *1..4

hash = Hash[ary.zip ary.dup.fill 0]

hash # => {1=>0, 2=>0, 3=>0, 4=>0}