Iterating over multiple hashes
-
Hello all,
I have a number of hashes to store info for me, they all have the same keys but each has a different value for each key. I've made a user interface which enables a user to input a list of strings corresponding to a value in the hash. Because the list is input by the user, it is important for me to have the ability to iterate over the hashes (say, from a list of the hash names) without having to call each one in an "if" statement every time I need to do an operation (one could imagine how tedious and inefficient it has been to call all my hashes individually ).I thought something like this...
` a={:name => "eh", :word=> %w{apple, ascend}}
b={:name => "bee", :word=> %w{ball}}
c={:name => "sea", :word=> %w{}}
d={:name => "d", :word => %w{door dog down}}word_size_array = Array.new
user_specified_list = ["a", "c"]
array_of_hash_names = %w{a b c d}user_specified_list.each do |x|
array_of_hash_names.each |y|
if y[:name] == x
word_size_array << y[:word].length
end
end`
would have worked but it doesn't.Instead, I have to do something like this...
user_specified_list.each do |x| if a[:name] == x word_size_array << a[:word].length elsif b[:name] == x word_size_array << b[:word].length elsif c[:name] == x word_size_array << c[:word].length elsif d[:name] == x word_size_array << d[:word].length else end end
...for about 15 (and counting) hashes!I would like to be able to call the hash using a ".each" or "do" loop but I have not been able to find the trick that would allow me to do this. Does someone have a way to do this (or an easier way to do this database-type stuff;) ?)
All input is welcome,
Thanks,
laura -
Laura,
The following line creates an Array of String objects.
array_of_hash_names = %w{a b c d} ==> %w{a b c d}.inspect ["a", "b", "c", "d"]You want an Array of the Hash objects:
array_of_hashes = [a, b, c, d] -
Thank you so much for the response!
It works great!
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better π
Register LoginAdvertisement