Oneliner normaler Rubin, funktioniert nur mit Rubin> 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- Methode gibt immer das Objekt zurück, für das aufgerufen wird ...
Andernfalls können Sie bei Bedarf active_support/core_ext/hash
(was in jeder Rails-Anwendung automatisch erforderlich ist) je nach Ihren Anforderungen eine der folgenden Methoden verwenden:
➜ ~ 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}
Ausgenommen wird ein Blacklist-Ansatz verwendet, sodass alle als Argumente aufgelisteten Schlüssel entfernt werden , während Slice einen Whitelist-Ansatz verwendet, sodass alle Schlüssel entfernt werden, die nicht als Argumente aufgeführt sind. Es gibt auch die Bang-Version dieser Methoden ( except!
und slice!
), die den angegebenen Hash ändern, aber ihr Rückgabewert ist unterschiedlich. Beide geben einen Hash zurück. Es stellt die entfernten Schlüssel für slice!
und die Schlüssel dar, die für Folgendes aufbewahrt werden 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}