web-dev-qa-db-fra.com

Comment rechercher dans un tableau de hachages par valeurs de hachage en ruby?

J'ai un tableau de hachages, @fathers.

a_father = { "father" => "Bob", "age" =>  40 }
@fathers << a_father
a_father = { "father" => "David", "age" =>  32 }
@fathers << a_father
a_father = { "father" => "Batman", "age" =>  50 }
@fathers << a_father 

Comment puis-je rechercher ce tableau et retourner un tableau de hachages pour lesquels un bloc retourne vrai?

Par exemple:

@fathers.some_method("age" > 35) #=> array containing the hashes of bob and batman

Merci.

222
doctororange

Vous recherchez Enumerable # select (aussi appelé find_all):

@fathers.select {|father| father["age"] > 35 }
# => [ { "age" => 40, "father" => "Bob" },
#      { "age" => 50, "father" => "Batman" } ]

Selon la documentation, il "renvoie un tableau contenant tous les éléments de [l'énumérable, dans ce cas @fathers] pour lequel bloc n'est pas faux."

393
Jordan Running

cela retournera le premier match

@fathers.detect {|f| f["age"] > 35 }
189
Naveed

si votre tableau ressemble à

array = [
 {:name => "Hitesh" , :age => 27 , :place => "xyz"} ,
 {:name => "John" , :age => 26 , :place => "xtz"} ,
 {:name => "Anil" , :age => 26 , :place => "xsz"} 
]

Et vous voulez savoir si une valeur est déjà présente dans votre tableau. Utiliser la méthode de recherche

array.find {|x| x[:name] == "Hitesh"}

Ceci retournera un objet si Hitesh est présent dans le nom, sinon, retournera nil

32
Hitesh Ranaut