2016-11-24 6 views
2

ネストされたハッシュのセットがあります。私は:[言語]ハッシュの内側にネストされた配列に文字列を追加します。

def adding_to_dennis 
    programmer_hash = 
     { 
     :grace_hopper => { 
      :known_for => "COBOL", 
      :languages => ["COBOL", "FORTRAN"] 
     }, 
     :alan_kay => { 
      :known_for => "Object Orientation", 
      :languages => ["Smalltalk", "LISP"] 
     }, 
     :dennis_ritchie => { 
      :known_for => "Unix", 
      :languages => ["C"] 
     } 
    } 
     programmer_hash[:dennis_ritchie][:languages] << "Assembly" 
end 

これは私が整数に記号のない暗黙の変換を取得しないエラーです」

+1

このコードはそのまま動作します。なぜあなたはそれをメソッドでラップしたのか分かりませんが、おそらくそれが問題です。 – tadman

+0

それはうまくいくと思います。学習環境でテストに合格するための方法でラップする必要があります。 –

答えて

1

:私は、関連付けられた配列値に文字列「アセンブリ」を追加したい[dennis_ritche]あなたが見ている問題は、メソッド内のハッシュを操作していることであり、結果として誤って間違ったものが返されていると考えています。このメソッドは最後に実行された操作であるためArrayを返します(<<、Array)。

これを修正するには、操作を行うメソッドを定義します。

def add_to_hash(hash, programmer = :dennis_ritchie, language = 'Assembly') 
    hash[programmer][:languages] << language 
end 

定義の独立しを行います。

programmer_hash = 
    { 
    :grace_hopper => { 
     :known_for => "COBOL", 
     :languages => ["COBOL", "FORTRAN"] 
    }, 
    :alan_kay => { 
     :known_for => "Object Orientation", 
     :languages => ["Smalltalk", "LISP"] 
    }, 
    :margaret_hamilton => { 
     :known_for => "Apollo Program", 
     :languages => ["Assembly"] 
    }, 
    :dennis_ritchie => { 
     :known_for => "Unix", 
     :languages => ["C"] 
    } 
} 

そして、ハッシュを操作するためにそれを呼び出す:

add_to_hash(programmer_hash) 

programmer_hash構造は、その後更新されます。

関連する問題