Oneliner liso rubí, solo funciona con rubí> 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}
El método Tap siempre devuelve el objeto sobre el que se invoca ...
De lo contrario, si lo ha requerido active_support/core_ext/hash
(que se requiere automáticamente en todas las aplicaciones de Rails), puede usar uno de los siguientes métodos según sus necesidades:
➜ ~ 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}
excepto que utiliza un enfoque de lista negra, por lo que elimina todas las claves enumeradas como argumentos, mientras que slice utiliza un enfoque de lista blanca, por lo que elimina todas las claves que no figuran como argumentos. También existe la versión de explosión de esos métodos ( except!
y slice!
) que modifican el hash dado pero su valor de retorno es diferente, ambos devuelven un hash. Representa las claves eliminadas slice!
y las claves que se guardan para 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}