-3
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
4

3 回答 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 回答