Подтвердить что ты не робот

Как искать в массиве хэшей значения хэша в рубине?

У меня есть массив хэшей, @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 

Как я могу искать этот массив и возвращать массив хэшей, для которых блок возвращает true?

Например:

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

Спасибо.

4b9b3361

Ответ 1

Вы ищете Enumerable # select (также называемый find_all):

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

В документации он возвращает массив, содержащий все элементы [перечислимого, в данном случае @fathers], для которого блок не является ложным. "

Ответ 2

это вернет первое совпадение

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

Ответ 3

если ваш массив выглядит как

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 присутствует в имени, иначе return nil