Desculpe por esse tipo de pergunta, sou novato aqui e estou aprendendo a usar essa ferramenta. Tentarei encontrar as respostas antes de postar aqui.
Lucas Renan
107
Para todos que se queixam deste tipo de pergunta: leia o FAQ: 'Nenhuma pergunta é trivial demais ou "novata" demais. Se você não gostar da pergunta, não responda e deixe que outra pessoa o faça. Se a pergunta já foi feita e respondida no SO, certifique-se de marcar como duplicada. Mas não há razão para repreender os recém-chegados por serem novos.
31909 Brian Campbell
Respostas:
117
Eu estou supondo que você está tentando descobrir se um determinado valor existe dentro da matriz e, se for esse o caso, você pode usar a Matriz # include? (Value):
a =[1,2,3,4,5]
a.include?(3)# => true
a.include?(9)# => false
Se você quer dizer algo mais, verifique a API Ruby Array
Eu usaria o índice Array #, mas verificar a API Ruby Array é uma ótima dica.
Wylliam Judd 15/10
82
O uso Array#selectfornecerá uma variedade de elementos que atendem aos critérios. Mas se você estiver procurando uma maneira de obter o elemento da matriz que atenda aos seus critérios, Enumerable#detectseria o melhor caminho a seguir:
array =[1,2,3]
found = array.select {|e| e ==3}#=> [3]
found = array.detect {|e| e ==3}#=> 3
Caso contrário, você teria que fazer algo estranho, como:
Obrigado! Eu sabia, Enumerable#selectmas #detecté exatamente o que estava procurando.
Justin Adkins
1
array.select{}percorrerá todos os elementos da matriz procurando aqueles que correspondem à condição. array.findem vez disso, retornará o primeiro elemento que corresponde à condição. Então uso preferível array.find{ |e| e == 3 }entãoarray.select{ |e| e == 3 }.first
Oscar Gonzalez
Eu acho que você quis dizer que .find_index eu não sei se existe.find
Ross Attrill
26
Se você deseja encontrar um valor da matriz, use Array#find:
Para descobrir se existe um valor em uma matriz, você também pode usar #in?ao usar o ActiveSupport. #in?funciona para qualquer objeto que responda a #include?:
@ MarkThomas, por favor, cite a parte da minha resposta que você está afirmando ser uma declaração incorreta e eu a atualizarei com prazer. Estou assumindo que estamos usando o inglês aqui (não criamos definições para palavras). E quando milhares de pessoas pesquisam "ruby FIND value in array" no Google, elas veem essa pergunta como o primeiro resultado, por isso tenho certeza de que todas elas gostariam de obter a resposta correta.
Mike S
1
Além disso, @MarkThomas, se você estiver correto, essa pergunta deve ser encerrada por ser duplicada de stackoverflow.com/questions/1986386/… , mas há uma diferença funcional entre "encontrar" e "verificar a existência" em uma matriz.
Mike S
Sou alérgico a pessoas que ressuscitam perguntas antigas e fornecem pouca ou nenhuma substância. Isso acontece muito. No seu caso, embora selectjá tenha sido fornecida como resposta em 2009, você forneceu um snippet de amostra que é um pouco melhor. Então, depois de repensá-lo, retiro o que disse anteriormente.
9788 Mark
8
Sei que essa pergunta já foi respondida, mas vim aqui procurando uma maneira de filtrar elementos em uma matriz com base em alguns critérios. Então, aqui está o meu exemplo de solução: using select, encontro todas as constantes na classe que começam com "RUBY_"
Class.constants.select {|c| c.to_s =~/^RUBY_/}
ATUALIZAÇÃO: Enquanto isso, descobri que o Array # grep funciona muito melhor. Para o exemplo acima,
Respostas:
Eu estou supondo que você está tentando descobrir se um determinado valor existe dentro da matriz e, se for esse o caso, você pode usar a Matriz # include? (Value):
Se você quer dizer algo mais, verifique a API Ruby Array
fonte
O uso
Array#select
fornecerá uma variedade de elementos que atendem aos critérios. Mas se você estiver procurando uma maneira de obter o elemento da matriz que atenda aos seus critérios,Enumerable#detect
seria o melhor caminho a seguir:Caso contrário, você teria que fazer algo estranho, como:
fonte
Enumerable#select
mas#detect
é exatamente o que estava procurando.array.select{}
percorrerá todos os elementos da matriz procurando aqueles que correspondem à condição.array.find
em vez disso, retornará o primeiro elemento que corresponde à condição. Então uso preferívelarray.find{ |e| e == 3 }
entãoarray.select{ |e| e == 3 }.first
.find_index
eu não sei se existe.find
Se você deseja encontrar um valor da matriz, use
Array#find
:Veja também:
Para descobrir se existe um valor em uma matriz, você também pode usar
#in?
ao usar o ActiveSupport.#in?
funciona para qualquer objeto que responda a#include?
:fonte
Array#find
nas referências Ruby. Deve ser uma coisa do Rails, já que outras pessoas o mencionaram. Hummm ....Enumerable
, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-findComo isso?
ou assim?
Veja o manual .
fonte
você pode usar Array.select ou Array.index para fazer isso.
fonte
Usar:
myarray.index "valuetoFind"
Isso retornará o índice do elemento desejado ou nulo se sua matriz não contiver o valor.
fonte
Esta resposta é para todos que percebem que a resposta aceita não aborda a pergunta como está atualmente escrita.
A pergunta pergunta como encontrar um valor em uma matriz. A resposta aceita mostra como verificar se existe um valor em uma matriz.
Já existe um exemplo usando
index
, por isso estou fornecendo um exemplo usando oselect
métodofonte
select
já tenha sido fornecida como resposta em 2009, você forneceu um snippet de amostra que é um pouco melhor. Então, depois de repensá-lo, retiro o que disse anteriormente.Sei que essa pergunta já foi respondida, mas vim aqui procurando uma maneira de filtrar elementos em uma matriz com base em alguns critérios. Então, aqui está o meu exemplo de solução: using
select
, encontro todas as constantes na classe que começam com "RUBY_"ATUALIZAÇÃO: Enquanto isso, descobri que o Array # grep funciona muito melhor. Para o exemplo acima,
fez o truque.
fonte
Class.constants.grep /^RUBY_/
fiz o truque.Obrigado pelas respostas.
Eu fiz assim:
fonte
Você pode optar por métodos de matriz.
Para ver todos os métodos de matriz, use a
methods
função com matriz. Por exemplo,A propósito, você pode usar um método diferente para verificar o valor na matriz. Você pode usar
a.include?("name")
.fonte