Is there a non-destructive way of deleting a key value pair from a hash?
For example, if you did
original_hash = {:foo => :bar}
new_hash = original_hash
new_hash = new_hash.reject{|key, _| key == :foo}
or
original_hash = {:foo => :bar}
new_hash = original_hash
new_hash = new_hash.dup
new_hash.delete(:foo)
then original_hash
is unchanged, and new_hash
is changed, but they're a tad verbose. However, if you did
original_hash = {:foo => :bar}
new_hash = original_hash
new_hash.delete(:foo)
then original_hash
is changed, which isn't what I want.
Is there a single method that does what I want?
original_hash
is changed in your first example usingdelete_if
. Also,new_hash
in your second example usingdelete
gets the value associated with:foo
, i.e.:bar
, not the hash itself. – Husband