Ich habe eine Reihe von Hashes, @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
Wie kann ich dieses Array durchsuchen und ein Array von Hashes zurückgeben, für die ein Block true zurückgibt?
Beispielsweise:
@fathers.some_method("age" > 35) #=> array containing the hashes of bob and batman
Vielen Dank.
@fathers.find {|father| father["age"] > 35 }
stattdessen verwenden.Dies wird das erste Spiel zurückgeben
quelle
#select
- aber alles gilt für Ihren Anwendungsfall.#detect
wird zurückgegeben,nil
wenn keine Übereinstimmung gefunden wird, während#select
in @ Jordans Antwort zurückgegeben wird[]
.find
anstelledetect
für einen besser lesbaren Code verwendenfind
kann jedoch in Schienen verwirrend werden.select
unddetect
sind nicht gleich,select
durchquert das gesamte Array unddetect
stoppt, sobald die erste Übereinstimmung gefunden wird. WENN Sie nach EINEM Spiel@fathers.select {|f| f["age"] > 35 }.first
gegen@fathers.detect {|f| f["age"] > 35 }
Leistung und Lesbarkeit suchen , gilt meine Stimme fürdetect
wenn Ihr Array aussieht
Und Sie möchten wissen, ob in Ihrem Array bereits ein Wert vorhanden ist. Verwenden Sie die Suchmethode
Dies gibt ein Objekt zurück, wenn Hitesh im Namen vorhanden ist, andernfalls wird nil zurückgegeben
quelle
"hitesh"
, wird der Hash nicht zurückgegeben. Wie können wir in solchen Fällen auch die Groß- und Kleinschreibung berücksichtigen?