如何创建哈希,其中键是来自数组Ruby的值

时间:2014-12-04 21:32:42

标签: ruby arrays hash key

我有一个数组:

arr = [a, ab, abc]

我想使用数组的值作为键来创建哈希:

newhash = [a[1], ab[1], abc[1]]

我试过了:

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

无济于事。

我如何在ruby中完成此操作?

4 个答案:

答案 0 :(得分:0)

==是比较。 =正在分配。所以只需修改== into =。它有效。

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

(我相信a,ab,abc是字符串)

要了解更多信息,这可能会对您有所帮助。 Array to Hash Ruby

答案 1 :(得分: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}

答案 2 :(得分:0)

如果你感觉像一个单行,那么这也会有用

h = Hash[arr.collect { |v| [v, 1] } ]
每个元素在数组中调用

collect,因此它返回一个由2个元素组成的键值对数组。

然后将其提供给哈希构造函数,该构造函数将对数组转换为哈希

答案 3 :(得分:0)

您还可以使用#reduce中的Enumerable方法(包含在Array类中)。

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

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

{"a": 1, "ab": 1, "abc": 1}