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}
except使用黑名單方法,因此它將刪除列爲參數的所有鍵,而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}
如果您真的需要,您可以隨時擴展(在運行時打開)內置的哈希以添加此自定義方法。 – dbryson 2011-06-03 13:45:40