Pigeon Organizer Lab
Mark Harless
Posted on August 26, 2019
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:
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:
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.
How to iterate through a hash using
.each
and assigning the keys and values different names.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.I re-learned how to change something to a string using
.to_s
Final Iteration
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
💖 💪 🙅 🚩
Mark Harless
Posted on August 26, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
codenewbie My Journey Through Ruby Event Manager, Hangman, and Tackling Coolant Leaks
November 29, 2024