Problem

I'm given a hash of information and I need to rearrange them into a new hash sorted in a different way.

To go from this: ruby pigeon_data = { :color => { :purple => ["Theo", "Peter Jr.", "Lucky"], :grey => ["Theo", "Peter Jr.", "Ms. K"], :white => ["Queenie", "Andrew", "Ms. K", "Alex"], :brown => ["Queenie", "Alex"] }, :gender => { :male => ["Alex", "Theo", "Peter Jr.", "Andrew", "Lucky"], :female => ["Queenie", "Ms. K"] }, :lives => { "Subway" => ["Theo", "Queenie"], "Central Park" => ["Alex", "Ms. K", "Lucky"], "Library" => ["Peter Jr."], "City Hall" => ["Andrew"] } } To this: ruby pigeon_list = { "Theo" => { :color => ["purple", "grey"], :gender => ["male"], :lives => ["Subway"] }, "Peter Jr." => { :color => ["purple", "grey"], :gender => ["male"], :lives => ["Library"] }, "Lucky" => { :color => ["purple"], :gender => ["male"], :lives => ["Central Park"] }, "Ms. K" => { :color => ["grey", "white"], :gender => ["female"], :lives => ["Central Park"] }, "Queenie" => { :color => ["white", "brown"], :gender => ["female"], :lives => ["Subway"] }, "Andrew" => { :color => ["white"], :gender => ["male"], :lives => ["City Hall"] }, "Alex" => { :color => ["white", "brown"], :gender => ["male"], :lives => ["Central Park"] } }

What I Learned

While this one was challenging, I learned the most from this lab so far.

  1. How to iterate through a hash using .each and assigning the keys and values different names.

  2. I found that creating a new hash required to check to see if it exists which I found interesting. What I though I could do in one line, I had to do in three. I later found out I could do it in a single line using pigeon_list[:name] || = {} but I'm not sure how to use it yet.

  3. I re-learned how to change something to a string using .to_s

Final Iteration

ruby def nyc_pigeon_organizer(data) pigeon_list = {} data.each do |color_gender_lives, value| value.each do |stats, all_names| all_names.each do |name| if pigeon_list[name] == nil pigeon_list[name] = {} end if pigeon_list[name][color_gender_lives] == nil pigeon_list[name][color_gender_lives] = [] end pigeon_list[name][color_gender_lives].push(stats.to_s) end end end pigeon_list end