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
答案 0 :(得分:2)
让我们看看:
keys[0] == aCOGkey == a[0] == "bobgreen"
看起来该行失败了,因为a_hash
中没有关键字“bobgreen”。
答案 1 :(得分: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}
尽量不要在Ruby中使用for
。请改用枚举器。
使用符号表示哈希键。
答案 2 :(得分:0)
将新的键值对写入散列内的散列可以这样工作:
outer_hash['inner_hash_key']['new_key_in_inner_hash'] = 'String I want to add'.