哈希以字符数组为关键字

时间:2014-01-11 17:07:51

标签: ruby

我需要一个哈希,其中键由带有字符的数组表示。 但是当我有这样的数组时:

a = %w(a b c), b = %w(d e f), c = %w(g h i)

我创建了一个新的Hash,并尝试给它值,我的结果很奇怪,我期待类似的东西:

H = { ["a", "b", "c"] => 1, ["d", "e", "f"] => 2 }   

但是我得到这样的东西:

{"[\"a\", \"b\", \"c\"]"=>1} 

我创建此哈希的方式很简单:

H = {}
H["#{array_name}"]

这是正常行为吗?如果是这样,我怎样才能使这些键正常的字符数组?

1 个答案:

答案 0 :(得分:3)

abc是局部变量。它们不是数组名称。他们持有3个不同Array实例的引用。如下所示:

a = %w(a b c)
b = %w(d e f)
c = %w(g h i)
H = {}
H[a] = 1
H[b] = 2
H[c] = 3
H # => {["a", "b", "c"]=>1, ["d", "e", "f"]=>2, ["g", "h", "i"]=>3}

一种Rubyish方式:

a = %w(a b c), %w(d e f), %w(g h i)
Hash[a.zip([1,2,3])]
# => {["a", "b", "c"]=>1, ["d", "e", "f"]=>2, ["g", "h", "i"]=>3}