У меня есть один хэш, где ключ - это строка, а значение - массив строки. я хочу что-то вроде этого:Хэш массивов в Ruby
{"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. В идеале, каков правильный способ кодирования этой проблемы?
«У меня есть только один хэш и один массив, чтобы реализовать это». Не в вашем втором примере. Там у вас есть два массива. – Ajedi32
'{}' почти всегда предпочтительнее 'Hash.new' и' [] '' Array.new'. – tadman
@tadman Почему это предпочтительнее? Это просто для удобства чтения? или есть ли другие преимущества? –