我需要一个哈希,其中键由带有字符的数组表示。 但是当我有这样的数组时:
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}"]
这是正常行为吗?如果是这样,我怎样才能使这些键正常的字符数组?
答案 0 :(得分:3)
a
,b
,c
是局部变量。它们不是数组名称。他们持有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}