我有一个哈希表,其中键是字符串,值是字符串数组。
我想要类似于这样的东西:
{"k1"=>["v1", "v2"], "k2"=>["v3", "v4"]}
我只有一个哈希表和一个数组来实现这个功能。我编写了以下代码:
hash1 = Hash.new
arr = Array.new
arr.push "v1"
arr.push "v2"
hash1["k1"] = arr
#hash is like this: {"k1"=>["v1", "v2"]
#Now I clear the array to read the new values
arr. clear
arr.push "v3"
arr.push "v4"
hash1["k2"] = arr
puts hash1
#Output: {"k1"=>["v3", "v4"], "k2"=>["v3", "v4"]}
#Notice that k1's value also got updated
然后我改了一行代码:
hash1 = Hash.new
arr = Array.new
arr.push "v1"
arr.push "v2"
hash1["k1"] = arr
arr = [] # ** This is the only changed line. Now k1's value is correct. **
arr.push "v3"
arr.push "v4"
hash1["k2"] = arr
puts hash1
#Output: {"k1"=>["v1", "v2"], "k2"=>["v3", "v4"]} (which I wanted)
有人可以向我解释一下这是如何发生的吗?我对Ruby非常陌生。理想情况下,解决这个问题的正确方法是什么?
{ }
比Hash.new
更常用,[ ]
比Array.new
更常用。 - tadman{ }
变成了{ foo: 'bar' }
,而不必从Hash.new
切换到那个表示法。 - tadman