wake-up-neo.com

Wie suche ich in einem Array von Hashes nach Hash-Werten in Ruby?

Ich habe eine Reihe von Hashes, @väter.

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 

Wie kann ich dieses Array durchsuchen und ein Array von Hashes zurückgeben, für die ein Block true zurückgibt?

Zum Beispiel:

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

Vielen Dank.

222
doctororange

Sie suchen nach Enumerable # select (auch als find_all Bezeichnet):

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

Gemäß der Dokumentation wird "ein Array zurückgegeben, das alle Elemente von [der Aufzählung, in diesem Fall @fathers] Enthält, für die der Block nicht falsch ist."

393
Jordan Running

dies gibt die erste Übereinstimmung zurück

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

wenn Ihr Array aussieht

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

Und Sie möchten wissen, ob in Ihrem Array bereits ein Wert vorhanden ist. Verwenden Sie die Suchmethode

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

Dies gibt ein Objekt zurück, wenn Hitesh im Namen vorhanden ist, andernfalls wird nil zurückgegeben

32
Hitesh Ranaut