Em Ruby, como posso encontrar um valor em uma matriz?
Em Ruby, como posso encontrar um valor em uma matriz?
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):
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
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:
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:
found = array.select {|e| e == 3}.first
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ível array.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
:
arr = [1,2,6,4,9]
arr.find {|e| e%3 == 0} #=> 6
Veja também:
arr.select {|e| e%3 == 0} #=> [ 6, 9 ]
e.include? 6 #=> true
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?
:
arr = [1, 6]
6.in? arr #=> true
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-find
Como isso?
a = [ "a", "b", "c", "d", "e" ]
a[2] + a[0] + a[1] #=> "cab"
a[6] #=> nil
a[1, 2] #=> [ "b", "c" ]
a[1..3] #=> [ "b", "c", "d" ]
a[4..7] #=> [ "e" ]
a[6..10] #=> nil
a[-3, 3] #=> [ "c", "d", "e" ]
# special cases
a[5] #=> nil
a[5, 1] #=> []
a[5..10] #=> []
ou assim?
a = [ "a", "b", "c" ]
a.index("b") #=> 1
a.index("z") #=> nil
você pode usar Array.select ou Array.index para fazer isso.
Usar:
myarray.index "valuetoFind"
Isso retornará o índice do elemento desejado ou nulo se sua matriz não contiver o valor.
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 o select
método
1.9.3-p327 :012 > x = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
1.9.3-p327 :013 > x.select {|y| y == 1}
=> [1]
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_"
Class.constants.select {|c| c.to_s =~ /^RUBY_/ }
ATUALIZAÇÃO: Enquanto isso, descobri que o Array # grep funciona muito melhor. Para o exemplo acima,
Class.constants.grep /^RUBY_/
fez o truque.
Class.constants.grep /^RUBY_/
fiz o truque.
Obrigado pelas respostas.
Eu fiz assim:
puts 'find' if array.include?(value)
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 = ["name", "surname"]
a.methods
A propósito, você pode usar um método diferente para verificar o valor na matriz. Você pode usar a.include?("name")
.