web-dev-qa-db-ja.com

rubyのハッシュ値でハッシュの配列内を検索するにはどうすればよいですか?

ハッシュの配列@fatherがあります。

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 

この配列を検索して、ブロックがtrueを返すハッシュの配列を返すにはどうすればよいですか?

例えば:

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

ありがとう。

216
doctororange

探しているのは Enumerable#select (別名find_all):

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

ドキュメントによれば、「ブロックが偽ではない[列挙可能な、この場合は@fathers]のすべての要素を含む配列を返します。」

388
Jordan Running

これは最初の一致を返します

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

配列が次のように見える場合

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

また、配列に値が既に存在するかどうかを知りたい場合。検索方法を使用

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

これは、名前にHiteshが存在する場合はオブジェクトを返し、そうでない場合はnilを返します

30
Hitesh Ranaut