-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"

にキー「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}

forRubyでは使用しないようにしてください。代わりに列挙子を使用してください。ハッシュキーには記号を使用します。

于 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 に答える