delete
delete(p1)
public
Deletes the key-value pair and returns the value from hsh whose key is equal to key. If the key is not found, it returns nil. If the optional code block is given and the key is not found, pass in the key and return the result of block.
h = { "a" => 100, "b" => 200 } h.delete("a") #=> 100 h.delete("z") #=> nil h.delete("z") { |el| "#{el} not found" } #=> "z not found"
Hash#except
Note that the ActiveSupport library provides the except and except! methods, which return the Hash minus the given keys. So you don’t need to write your own wrapper if you happen to be using Rails or ActiveSupport as a stand-alone library:
http://apidock.com/rails/ActiveSupport/CoreExtensions/Hash/Except/except
Another Hash#without
Mange made me think, and I wanted to expand on his example with a small change.
class Hash def without(*keys) dup.without!(*keys) end def without!(*keys) reject! { |key| keys.include?(key) } end end h = { :a => 1, :b => 2, :c => 3 } h.without(:a) #=> { :b => 2, :c => 3 } h #=> { :a => 1, :b => 2, :c => 3 } h.without(:a, :c) #=> { :b => 2 } h.without!(:a, :c) # { :b => 2 } h #=> { :b => 2 }