reject - remove field from hash ruby
Eliminar mĂșltiples pares de clave y valor del hash en Rails (3)
ActiveSupport que forma parte de Rails viene con varios métodos incorporados que pueden ayudarlo a lograr su objetivo.
Si solo desea eliminar algunos pares clave-valor, puede usar Hash#except!
number.except!(:a, :b, :c)
Si desea conservar el hash original, use Hash#except
new_hash = number.except!(:a, :b, :c)
new_hash # => {:d=>4}
number # => {:a=>1, :b=>2, :c=>3, :d=>4}
También puedes ir con Rails-free way:
new_hash = number.dup.tap do |hash|
%i[a b c].each {|key| hash.delete(key)}
end
new_hash # => {:d=>4}
number # => {:a=>1, :b=>2, :c=>3, :d=>4}
PD: el último ejemplo de código es muy lento, solo lo ofrezco como alternativa.
number = {:a => 1, :b => 2, :c => 3, :d => 4}
Tras evaluar una determinada condición, quiero eliminar el par clave-valor de a, b, c
o, más eficaz que la solución del segundo Chris, pero más corta que la primera:
%w"A B C".each{|v| number.delete(v)}
number.delete "A"
number.delete "B"
number.delete "C"
O, menos performante pero más conciso:
number.reject! {|k, v| %w"A B C".include? k }