Oneliner纯红宝石,仅适用于> 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}
除了使用黑名单方法,因此它将删除所有列为args的键,而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}