2016-03-25 19 views
0

# Hash.new aracılığıyla hiçbir başarı sağlamadan karma eklemeyi denedim, şimdi de sınırlı başarıya sahip forumlara göre. Hash elle girmeden #rand (1..100) [0] 'a eklemeye çalışıyorum. Herhangi bir fikir?Haşerelere karma ekleme (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

Sorunuz kafa karıştırıcı. İstediğiniz girdi ve çıktıya bir örnek verebilir misiniz? – Shelvacu

+0

Her bir özellik için ayrı kareler bulundurmak genellikle kötü bir tasarımdır. Ayrıca, Hash.new (0) 'gibi bir varsayılan belirtmeniz gerekmedikçe' Hash.new' yerine '{}' kullanın. – tadman

+0

çıkışı- kişi = [ { "first_name" => "Bob", "last_name" => "Jones", "yaş" => rand (1..100), "hobiler" => ["basketbol", "satranç", "telefon etiketi"] }, – whatabout11

cevap

2

senin yapısı varsayarak, bunu:

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

Sen ideal yerine sembol tarzı tuşları kullanmak istiyorum. Bu böyle açıklanmadan anlamına gelecektir:

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

Bu yolla people[0][:first_name] gibi erişin. Birleştirilen karma, :age için sembol tuşlarını kullanır. Ruby dizelerinde hatırla ve semboller eşdeğer değil, 'bob' != :bob. Bu gibi düzenli yapılar için semboller kullanmalısınız, daha rasgele veriler için dizeler.

+0

harika cevap ve basit, teşekkür ederim! – whatabout11