method

delete

v2_2_9 - Show latest stable - Class: Hash
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, returns the default value. 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"

3Notes

Hash#except

mindloaf · Feb 19, 20108 thanks

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

Hash#without

Mange · Oct 7, 20094 thanks

Here's a small helper for doing the "opposite" of this method: class Hash def without(*keys) cpy = self.dup keys.each { |key| cpy.delete(key) } cpy end end

h = { :a => 1, :b => 2, :c => 3 }
h.without(:a)      #=> { :b => 2, :c => 3 }
h.without(:a, :c)  #=> { :b => 2 }

Another Hash#without

Adkron · Mar 13, 20131 thank

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 }