Простой рубин Oneliner, работает только с ruby> 1.9.x:
1.9.3p0 :002 > h = {:a => 1, :b => 2}
=> {:a=>1, :b=>2}
1.9.3p0 :003 > h.tap { |hs| hs.delete(:a) }
=> {:b=>2}
Метод Tap всегда возвращает объект, для которого вызывается ...
В противном случае, если вам требуется active_support/core_ext/hash
(что автоматически требуется в каждом приложении Rails), вы можете использовать один из следующих методов в зависимости от ваших потребностей:
➜ ~ irb
1.9.3p125 :001 > require 'active_support/core_ext/hash' => true
1.9.3p125 :002 > h = {:a => 1, :b => 2, :c => 3}
=> {:a=>1, :b=>2, :c=>3}
1.9.3p125 :003 > h.except(:a)
=> {:b=>2, :c=>3}
1.9.3p125 :004 > h.slice(:a)
=> {:a=>1}
за исключением того, что используетПодход черного списка, поэтому он удаляет все ключи, перечисленные как аргументы, в то время как slice использует подход белого списка, поэтому он удаляет все ключи, которые не перечислены в качестве аргументов.Существует также версия взрыва этих методов (except!
и slice!
), которые модифицируют данный хеш, но их возвращаемое значение отличается, оба возвращают хеш.Он представляет собой удаленные ключи для slice!
и ключи, которые хранятся для except!
:
1.9.3p125 :011 > {:a => 1, :b => 2, :c => 3}.except!(:a)
=> {:b=>2, :c=>3}
1.9.3p125 :012 > {:a => 1, :b => 2, :c => 3}.slice!(:a)
=> {:b=>2, :c=>3}