a = ["Bob Green", "Don Brown", "Rich Freedom"]
a_hash = {"key_name" =>{"name" => "a_name", "a_thing" => 0}}
keys = a_hash.keys
for i in 0..a.length
aCOG = a[i]
aCOGkey = a[i].to_s.downcase.delete(' ')
keys[i] = aCOGkey
a_hash[keys[i]]["name"] = aCOG #why does this line fail?
end
问问题
100 次
3 回答
2
让我们来看看:
keys[0] == aCOGkey == a[0] == "bobgreen"
看起来那条线失败了,因为a_hash
.
于 2012-09-26T20:18:57.197 回答
1
嵌套哈希不只是自行创建。换句话说,Ruby 也不知道键的值是哈希。
您可以使用上述所有方法来专门分配哈希,也可以使用
a_hash = Hash.new { |h,k| h[k] = {} }
这假设所有值a_hash
都是一个散列(嵌套散列)。此方法可以将默认值设置为哈希。你也可以h[k] = {name:"",a_thing:0}
在你的情况下设置。
所以你只需要这样做:
a = ["Bob Green", "Don Brown", "Rich Freedom"]
a_hash = Hash.new { |h,k| h[k] = {} }
a.each{|n| a_hash[n.to_s.downcase.delete(' ')]["name"] = n}
尽量不要for
在 Ruby 中使用。请改用枚举器。对哈希键使用符号。
于 2012-09-26T20:39:56.790 回答
0
将新的键值对写入散列中的散列可以像这样工作:
outer_hash['inner_hash_key']['new_key_in_inner_hash'] = 'String I want to add'.
于 2012-09-26T20:18:00.420 回答