98 votes

Le hachage supprime tout sauf les clés spécifiques

Je voudrais supprimer toutes les clés d'un hachage, à l'exception d'une clé donnée.

Par example:

 {
 "firstName": "John",
 "lastName": "Smith",
 "age": 25,
 "address":
 {
     "streetAddress": "21 2nd Street",
     "city": "New York",
     "state": "NY",
     "postalCode": "10021"
 },
 "phoneNumber":
 [
     {
       "type": "home",
       "number": "212 555-1234"
     },
     {
       "type": "fax",
       "number": "646 555-4567"
     }
 ]
}

Je veux tout supprimer sauf "prénom" et/ou "adresse"

Merci

319voto

ream88 Points 5065

Et slice ?

 hash.slice('firstName', 'lastName')
 # => { 'firstName' => 'John', 'lastName' => 'Smith' }

54voto

Jake Dempsey Points 2967

Quelques autres options :

 h.select {|k,v| ["age", "address"].include?(k) }

Ou tu peux faire ça :

 class Hash
  def select_keys(*args)
    select {|k,v| args.include?(k) }
  end
end

Vous pouvez donc maintenant simplement dire :

 h.select_keys("age", "address")

8voto

asiniy Points 430

Si vous utilisez Rails, veuillez considérer la méthode ActiveSupport except() : http://apidock.com/rails/Hash/except

 hash = { a: true, b: false, c: nil}
hash.except!(:c) # => { a: true, b: false}
hash # => { a: true, b: false }

6voto

Jim Deville Points 7137

Hash#select fait ce que vous voulez :

    h = { "a" => 100, "b" => 200, "c" => 300 }
   h.select {|k,v| k > "a"}  #=> {"b" => 200, "c" => 300}
   h.select {|k,v| v < 200}  #=> {"a" => 100}

Modifier (pour commentaire) :

en supposant que h est votre hachage ci-dessus :

 h.select {|k,v| k == "age" || k == "address" }

5voto

ar31an Points 39
hash = { a: true, b: false, c: nil }
hash.extract!(:c) # => { c: nil }
hash # => { a: true, b: false }

Prograide.com

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.

Powered by:

X