如何在Ruby中将字符串添加到哈希的哈希?

时间:2012-09-26 20:08:04

标签: ruby

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

3 个答案:

答案 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'.