Oneliner plaine ruby, il ne fonctionne qu'avec ruby > 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}
Appuyez sur la méthode renvoie toujours l'objet sur lequel est invoquée...
Sinon, si vous avez tenus active_support/core_ext/hash
(qui est automatiquement requise dans tous les Rails de l'application), vous pouvez utiliser l'une des méthodes suivantes selon vos besoins:
➜ ~ 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}
à l'exception utilise une liste noire de l'approche, de sorte qu'il supprime toutes les clés répertoriés comme args, tandis que la tranche utilise une liste blanche approche, de sorte qu'il supprime toutes les clés qui ne sont pas répertoriés en tant qu'arguments. Il y a aussi le coup de la version de ceux de la méthode (except!
et slice!
) de modifier la donnée de hachage, mais leur valeur de retour est différente à la fois de rentrer un code de hachage. Il représente l'retiré les clés pour slice!
et les touches qui sont conservées pour l' 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}