whatabout11
whatabout11

Reputation: 69

Adding hashes to hashes (Ruby)

I've tried adding hashes through #Hash.new with no success, now I am trying .merge as per the forums with limited success as well. I'm trying to add #rand(1..100) into [0] without going into the hash manually. Any ideas?

#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

Upvotes: 0

Views: 75

Answers (1)

tadman
tadman

Reputation: 211740

Assuming that's your structure, you do this:

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

You ideally want to use symbol-style keys instead. That would mean declaring them like this:

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

That way you access them like people[0][:first_name]. Your merged in hash uses symbol keys for :age. Remember in Ruby strings and symbols are not equivalent, that is 'bob' != :bob. You should use symbols for regular structures like this, strings for more arbitrary data.

Upvotes: 2

Related Questions