Eu tenho uma variedade de 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
Como posso pesquisar nessa matriz e retornar uma matriz de hashes para a qual um bloco retorna verdadeiro?
Por exemplo:
@fathers.some_method("age" > 35) #=> array containing the hashes of bob and batman
Obrigado.
@fathers.find {|father| father["age"] > 35 }
.isso retornará a primeira partida
fonte
#select
- mas tudo vale para o seu caso de uso.#detect
retornaránil
se nenhuma correspondência for encontrada, enquanto#select
, na resposta de @ Jordan, retornará[]
.find
em vez dedetect
um código mais legívelfind
no entanto, pode ficar confuso nos trilhos.select
edetect
não são iguais,select
atravessarão toda a matriz, enquantodetect
parará assim que a primeira correspondência for encontrada. Se você está procurando uma partida@fathers.select {|f| f["age"] > 35 }.first
contra@fathers.detect {|f| f["age"] > 35 }
desempenho e legibilidade, meu voto é paradetect
se sua matriz parecer
E você deseja saber se algum valor já está presente em sua matriz. Use o método Find
Isso retornará objeto se Hitesh estiver presente no nome, caso contrário, retornará nulo
fonte
"hitesh"
, ele não retornaria o hash. Como podemos explicar também o uso de letras maiúsculas e minúsculas nesses casos?