Sorry if this obvious, I'm just not getting it. If I have an array of hashes like:
people = [{:name => "Bob", :occupation=> "Builder"}, {:name => "Jim", :occupation =>
"Coder"}]
And I want to iterate over the array and output strings like: "Bob: Builder". How would I do it? I understand how to iterate, but I'm still a little lost. Right now, I have:
people.each do |person|
person.each do |k,v|
puts "#{v}"
end
end
My problem is that I don't understand how to return both values, only each value separately. What am I missing?
Thank you for your help.
The Ruby Enumerable#each method is the most simplistic and popular way to iterate individual items in an array. It accepts two arguments: the first being an enumerable list, and the second being a block. It takes each element in the provided list and executes the block, taking the current item as a parameter.
Iterating over a Hash You can use the each method to iterate over all the elements in a Hash. However unlike Array#each , when you iterate over a Hash using each , it passes two values to the block: the key and the value of each element.
Here you go:
puts people.collect { |p| "#{p[:name]}: #{p[:occupation]}" }
Or:
people.each do |person|
puts "#{person[:name]}: #{person[:occupation]}"
end
In answer to the more general query about accessing the values in elements within the array, you need to know that people
is an array of hashes. Hashes have a keys
method and values
method which return the keys and values respectively. With this in mind, a more general solution might look something like:
people.each do |person|
puts person.values.join(': ')
end
Will work too:
people.each do |person|
person.each do |key,value|
print key == :name ? "#{value} : " : "#{value}\n"
end
end
Output:
Bob : Builder
Jim : Coder
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With