2016-03-25 17 views
0

ハッシュを追加しようとしましたが、成功していないハッシュ。私は手動でハッシュに入ることなく[0]に#rand(1..100)を追加しようとしています。何か案は?ハッシュにハッシュを追加する(Ruby)

#age = Hash.new 
#email = Hash.new 
#age2 = rand(1..100) 
people = [ 
{ 
"first_name" => "Bob", 
"last_name" => "Jones", 
"hobbies" => ["basketball", "chess", "phone tag"] 
}, 
{ 
"first_name" => "Molly", 
"last_name" => "Barker", 
"hobbies" => ["programming", "reading", "jogging"] 
}, 
{ 
"first_name" => "Kelly", 
"last_name" => "Miller", 
"hobbies" => ["cricket", "baking", "stamp collecting"] 
} 
] 

people[0].each do |w| 
people.merge({:age => rand(1..100)}) 
puts "array 0 is #{w}" 
end 

puts p people 
+0

あなたの質問は混乱しています。あなたは、入力と出力の例をあなたに提供できますか? – Shelvacu

+0

属性ごとに別々のハッシュを持つのは、通常、設計が悪いことです。 'Hash.new(0)'のように、デフォルトを指定する必要がない限り、 'Hash.new'の代わりに' {} 'を使用してください。 – tadman

+0

出力 - 人= [{ "FIRST_NAME" => "ボブ"、 "LAST_NAME" => "ジョーンズ"、 "年齢" =>ランド(1..100)、 "趣味" => ["バスケットボール"、 "チェス"、 "電話タグ"] }、 – whatabout11

答えて

2

それはあなたの構造だと仮定すると、あなたは、次の操作を行います。

people.each do |person| 
    person['age'] = rand(1..100) 
end 

あなたは理想的に代わり、シンボルスタイルのキーを使用します。これは、次のように宣言することを意味します。

people = [ 
    { 
    first_name: "Bob", 
    last_name: "Jones", 
    ... 
    }, 
    ... 
] 

こうしてあなたはpeople[0][:first_name]のようにアクセスします。結合されたハッシュでは、:ageのシンボルキーが使用されます。 Rubyの文字列とシンボルは同等ではないことを覚えておいてください。つまり、'bob' != :bobです。このような規則的な構造のシンボル、より恣意的なデータのための文字列を使用する必要があります。

+0

素晴らしい答えと簡単、ありがとう! – whatabout11

関連する問題