2014-12-04 30 views

回答

0

==是比较。 =正在分配。所以只需将==修改为=。有用。

newhash = {} 
arr.each do |r| 
    newhash[r] = 1 
end 

(我相信,AB,ABC都是字符串)

要了解更多信息,这可能会帮助你。 Array to Hash Ruby

+0

是的,这工作。谢谢! – 12nm 2014-12-04 21:56:10

0

你可以这样说:

ary = [[:foo, 1], [:bar, 2]] 
Hash[ary] # => {:foo=>1, :bar=>2} 

如果你想这样做,就像你刚才试过了,要正确初始化哈希:

ary = [:foo, :bar] 
hash = {} 
ary.each do |key| 
    hash[key] = 1 
end # => {:foo=>1, :bar=>2} 
0

如果你感觉像单线程,这也会起作用

h = Hash[arr.collect { |v| [v, 1] } ] 

collect被调用一次数组中的每个元素,所以它返回一个由2个元素组成的键值对数组。

然后这个被馈送到哈希构造函数,它轮流对所述阵列为哈希

0

也可以使用从该Enumerable方法#reduce(其被包括在Array类)。

new_hash = arr.reduce({}) { |hsh, elem| hsh[elem] = 1; hsh } 

而且你new_hash看起来像这样在Ruby中:

{"a": 1, "ab": 1, "abc": 1} 
相关问题