J'ai un hash :
h1 = {:a => :A, :b => :B, :c => :C, :d => :D}
Quelle est la meilleure façon d'extraire un sous-réseau comme celui-ci ?
h1.extract_subhash(:b, :d, :e, :f) # => {:b => :B, :d => :D}
h1 #=> {:a => :A, :c => :C}
J'ai un hash :
h1 = {:a => :A, :b => :B, :c => :C, :d => :D}
Quelle est la meilleure façon d'extraire un sous-réseau comme celui-ci ?
h1.extract_subhash(:b, :d, :e, :f) # => {:b => :B, :d => :D}
h1 #=> {:a => :A, :c => :C}
Nous pouvons le faire en bouclant sur les clés que nous voulons seulement extraire et en vérifiant simplement que la clé existe et ensuite l'extraire.
class Hash
def extract(*keys)
extracted_hash = {}
keys.each{|key| extracted_hash[key] = self.delete(key) if self.has_key?(key)}
extracted_hash
end
end
h1 = {:a => :A, :b => :B, :c => :C, :d => :D}
h2 = h1.extract(:b, :d, :e, :f)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
5 votes
Note complémentaire : apidock.com/rails/Hash/slice%21
1 votes
@JanDvorak Cette question ne concerne pas seulement le retour d'un subhash mais aussi la modification d'un subhash existant. Ce sont des choses très similaires mais ActiveSupport a des moyens différents pour les traiter.