【发布时间】:2015-02-02 22:49:48
【问题描述】:
我有一个数组:
arr = [a, ab, abc]
我想做一个哈希,使用数组的值作为键:
newhash = [a[1], ab[1], abc[1]]
我试过了:
arr.each do |r|
newhash[r] == 1
end
无济于事。
我将如何在 ruby 中完成此任务?
【问题讨论】:
我有一个数组:
arr = [a, ab, abc]
我想做一个哈希,使用数组的值作为键:
newhash = [a[1], ab[1], abc[1]]
我试过了:
arr.each do |r|
newhash[r] == 1
end
无济于事。
我将如何在 ruby 中完成此任务?
【问题讨论】:
如果你觉得自己像个单线,这也可以
h = Hash[arr.collect { |v| [v, 1] } ]
collect 对数组中的每个元素调用一次,因此它返回一个由键值对组成的 2 元素数组组成的数组。
然后将其馈送到哈希构造函数,它将对数组转换为哈希
【讨论】:
您还可以使用Enumerable 中的#reduce 方法(包含在Array 类中)。
new_hash = arr.reduce({}) { |hsh, elem| hsh[elem] = 1; hsh }
你的new_hash 在 Ruby 中看起来像这样:
{"a": 1, "ab": 1, "abc": 1}
【讨论】:
== 是比较。 = 正在分配。所以只需将==修改为=。它有效。
newhash = {}
arr.each do |r|
newhash[r] = 1
end
(我相信 a,ab,abc 是字符串)
要了解更多信息,这可能会对您有所帮助。 Array to Hash Ruby
【讨论】:
你可以这样做:
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}
【讨论】: