In Ruby, come posso trovare un valore in un array?
In Ruby, come posso trovare un valore in un array?
Risposte:
Immagino che tu stia cercando di scoprire se un determinato valore esiste all'interno dell'array e, in tal caso, puoi utilizzare Array # include? (Value):
a = [1,2,3,4,5]
a.include?(3) # => true
a.include?(9) # => false
Se intendi qualcos'altro, controlla l' API Ruby Array
L'utilizzo Array#select
ti darà una serie di elementi che soddisfano i criteri. Ma se stai cercando un modo per estrarre l'elemento dall'array che soddisfi i tuoi criteri, Enumerable#detect
sarebbe un modo migliore per andare:
array = [1,2,3]
found = array.select {|e| e == 3} #=> [3]
found = array.detect {|e| e == 3} #=> 3
Altrimenti dovresti fare qualcosa di imbarazzante come:
found = array.select {|e| e == 3}.first
Enumerable#select
ma #detect
è esattamente quello che stavo cercando.
array.select{}
esaminerà tutti gli elementi dell'array cercando quelli che corrispondono alla condizione. array.find
restituirà invece il primo elemento che corrisponde alla condizione. Quindi uso preferibile array.find{ |e| e == 3 }
quindiarray.select{ |e| e == 3 }.first
.find_index
.find
Se vuoi trovare un valore dall'array, usa Array#find
:
arr = [1,2,6,4,9]
arr.find {|e| e%3 == 0} #=> 6
Guarda anche:
arr.select {|e| e%3 == 0} #=> [ 6, 9 ]
e.include? 6 #=> true
Per scoprire se esiste un valore in un array è possibile utilizzarlo anche #in?
quando si utilizza ActiveSupport. #in?
funziona per qualsiasi oggetto che risponde a #include?
:
arr = [1, 6]
6.in? arr #=> true
Array#find
nei riferimenti Ruby. Deve essere una cosa di Rails visto che altre persone ne hanno parlato. Hmmm ...
Enumerable
, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-find
Come questo?
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] #=> []
o così?
a = [ "a", "b", "c" ]
a.index("b") #=> 1
a.index("z") #=> nil
puoi usare Array.select o Array.index per farlo.
Uso:
myarray.index "valuetoFind"
Questo ti restituirà l'indice dell'elemento che desideri o nullo se il tuo array non contiene il valore.
Questa risposta è per tutti coloro che si rendono conto che la risposta accettata non affronta la domanda come è attualmente scritta.
La domanda chiede come trovare un valore in un array. La risposta accettata mostra come verificare se un valore esiste in un array.
Esiste già un esempio che utilizza index
, quindi sto fornendo un esempio utilizzando il select
metodo.
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
fosse già stato fornito come risposta nel 2009, hai fornito uno snippet di esempio che è leggermente migliore. Quindi, dopo averlo ripensato, ritiro ciò che ho detto prima.
So che a questa domanda è già stata data una risposta, ma sono venuto qui alla ricerca di un modo per filtrare gli elementi in un array in base ad alcuni criteri. Quindi ecco il mio esempio di soluzione: utilizzando select
, trovo tutte le costanti in Class che iniziano con "RUBY_"
Class.constants.select {|c| c.to_s =~ /^RUBY_/ }
AGGIORNAMENTO: Nel frattempo ho scoperto che Array # grep funziona molto meglio. Per l'esempio sopra,
Class.constants.grep /^RUBY_/
ha fatto il trucco.
Class.constants.grep /^RUBY_/
ha funzionato.
Grazie per le risposte.
Mi è piaciuto questo:
puts 'find' if array.include?(value)
Puoi scegliere metodi array.
Per vedere tutti i metodi dell'array usa methods
function con array. Per esempio,
a = ["name", "surname"]
a.methods
A proposito, puoi usare metodi diversi per controllare il valore nell'array. Puoi usare a.include?("name")
.