-
Notifications
You must be signed in to change notification settings - Fork 10
Hash
Frank Koehl edited this page Apr 17, 2015
·
2 revisions
The normal Hash#delete
method returns the value that's been removed from the hash, but it can be equally useful if we return the newly modified hash instead.
This approach effectively throws away the value being deleted, so don't use this when the deleted hash entry is valuable.
power_rangers = {
:red => 'Jason Scott',
:blue => 'Billy Cranston',
:green => 'Tommy Oliver'
}
power_rangers.delete! :green
# => { :red => 'Jason Lee Scott', :blue => 'Billy Cranston' }
If the key is not found, the hash is returned unaltered.
power_rangers.delete! :radiant_orchid
# => { :red => 'Jason Lee Scott', :blue => 'Billy Cranston' }
# It probably would've triggered if I included Kimberly
Deletes all records in a hash matching the keys passed in as an array. Returns a hash of deleted entries. Silently ignores any keys which are not found.
mega_man_bosses = { :metal_man => 1, :bubble_man => 2, :heat_man => 3, :wood_man => 4 }
mega_man_bosses.delete_each :chill_penguin, :spark_mandrill
# => nil, and get your series straight
mega_man_bosses
# => { :metal_man => 1, :bubble_man => 2, :heat_man => 3, :wood_man => 4 }
mega_man_bosses.delete_each :metal_man
# => { :metal_man => 1 }
mega_man_bosses
# => { :bubble_man => 2, :heat_man => 3, :wood_man => 4 }
mega_man_bosses.delete_each :bubble_man, :heat_man, :wheel_gator
# => { :bubble_man => 2, :heat_man => 3 }
mega_man_bosses
# => { :wood_man => 4 }
Same logic as delete_each
, but return the modified hash, and discard the deleted values.
Maintains parity with the contrast of delete
vs delete!
described above.
mega_man_bosses = { :air_man => 5, :crash_man => 6, :flash_man => 7, :quick_man => 8 }
mega_man_bosses.delete_each! :yellow_devil, :air_man
# => { :crash_man => 6, :flash_man => 7, :quick_man => 8 }
mega_man_bosses.delete_each! :flash_man
# => { :crash_man => 6, :quick_man => 8 }
# Take out flash anytime after metal, I like to wait until I need a breather.
mega_man_bosses.delete_each! :crash_man, :quick_man
# => { }