Sintassi per un ciclo for in ruby


Risposte:


118
array.each do |element|
  element.do_stuff
end

o

for element in array do
  element.do_stuff
end

Se hai bisogno di index, puoi usare questo:

array.each_with_index do |element,index|
  element.do_stuff(index)
end

15
stavo cercando specificamente l'indicizzazione in un ciclo, nessuna di queste soluzioni rende immediatamente ovvio come farlo. l'op ha tradito le sue intenzioni con array.length nel codice ...
jheriko

6
Leggi attentamente la mia risposta. C'è una soluzione di loop con indicizzazione inclusa.
Eimantas

8
Spesso eachè fantastico. Ma a volte voglio solo un dannato tradizionale ciclo for. A volte il "modo Ruby" può essere semplicemente fastidioso.
Ruben Martinez Jr.

1
come faccio a impostare manualmente l'indice in ruby ​​in modo da poter scrivere un ordinamento da solo
Muhammad Umer

6
e se volessi saltare le prossime due iterazioni
Muhammad Umer

77
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

l'altro modo per farlo è il seguente

3.times do |n|
  puts n;
end

questo stamperà 0, 1, 2, quindi potrebbe essere usato anche come iteratore di array

Pensa che la variante si adatti meglio alle esigenze dell'autore


29

Continuo a premere questo come collegamento superiore per google "ruby for loop", quindi volevo aggiungere una soluzione per i loop in cui il passaggio non era semplicemente "1". In questi casi, puoi utilizzare il metodo "step" che esiste sugli oggetti Numerics e Date. Penso che questa sia una buona approssimazione per un ciclo "for".

start = Date.new(2013,06,30)
stop = Date.new(2011,06,30)
# step back in time over two years, one week at a time
start.step(stop, -7).each do |d| 
    puts d
end

20

L'equivalenza sarebbe

for i in (0...array.size)
end

o

(0...array.size).each do |i|
end

o

i = 0
while i < array.size do
   array[i]
   i = i + 1 # where you may freely set i to any value
end

17
array.each_index do |i|
  ...
end

Non è molto Rubyish, ma è il modo migliore per eseguire il ciclo for dalla domanda in Ruby


È brillante. È vero che la risposta non è eachma piuttosto each_index. +1
Dan Rosenstark,

12

Per iterare un ciclo un numero fisso di volte, prova:

n.times do
  #Something to be done n times
end

10

Se non hai bisogno di accedere al tuo array , (solo un semplice ciclo for) puoi usare upto o each:

Fino a:

1.9.3p392 :030 > 2.upto(4) {|i| puts i}
2
3
4
 => 2 

Ogni:

1.9.3p392 :031 > (2..4).each {|i| puts i}
2
3
4
 => 2..4 

8

Che cosa? Dal 2010 e nessuno ha menzionato Ruby ha una multa per / in loop (è solo che nessuno lo usa):

ar = [1,2,3,4,5,6]
for item in ar
  puts item
end

5
Un vantaggio di .each ... do è che il blocco temporaneo esce dall'ambito alla fine del ciclo, mentre for ... in lascia l'ambito temporaneo.
Wayne Conrad

4
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}

0

La sintassi del ciclo di enumerazione di Ruby è diversa:

collection.each do |item|
...
end

Si legge come "una chiamata al metodo 'each' dell'istanza dell'oggetto array 'collection' che accetta il blocco con 'blockargument' come argomento". La sintassi del blocco in Ruby è "do ... end" o "{...}" per istruzioni a riga singola.

L'argomento del blocco "| elemento |" è facoltativo ma, se fornito, il primo argomento rappresenta automaticamente l'elemento enumerato in loop.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.