Sintaxis para un bucle for en ruby


Respuestas:


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

o

for element in array do
  element.do_stuff
end

Si necesita un índice, puede usar esto:

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

15
Estaba buscando específicamente indexar en un bucle, ninguna de estas soluciones hace que sea inmediatamente obvio cómo hacerlo. el operador traicionó sus intenciones con array.length en el código ...
jheriko

6
Lea mi respuesta con atención. Hay una solución de bucle con indexación incluida.
Eimantas

8
Muchas veces, eaches genial. Pero a veces solo quiero un maldito bucle tradicional. A veces, el "modo Ruby" puede ser simplemente molesto.
Ruben Martinez Jr.

1
¿Cómo configuro manualmente el índice en ruby ​​para poder escribir una clasificación yo mismo?
Muhammad Umer

6
¿Qué pasa si quiero omitir las próximas dos iteraciones
Muhammad Umer

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

la otra forma de hacerlo es la siguiente

3.times do |n|
  puts n;
end

eso imprimirá 0, 1, 2, por lo que también podría usarse como iterador de matriz

Piense que esa variante se ajusta mejor a las necesidades del autor.


29

Sigo presionando esto como un enlace superior para google "ruby for loop", así que quería agregar una solución para los bucles donde el paso no era simplemente '1'. Para estos casos, puede usar el método 'paso' que existe en los objetos Numéricos y Fecha. Creo que esta es una aproximación cercana para un bucle '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

La equivalencia sería

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

No es muy Rubyish, pero es la mejor manera de hacer el bucle for de la pregunta en Ruby


Esto es brillante. Es cierto que la respuesta no es eachsino más bien each_index. +1
Dan Rosenstark

12

Para iterar un bucle un número fijo de veces, intente:

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

10

Si no necesita acceder a su matriz , (solo un bucle for simple) puede usar hasta o cada uno:

Hasta:

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

Cada:

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

8

¿Qué? Desde 2010 y nadie mencionó que Ruby tiene un bucle for / in fine (es solo que nadie lo usa):

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

5
Una ventaja de .each ... do es que el bloque temporal queda fuera del alcance al final del ciclo, mientras que for ... in deja el alcance temporal.
Wayne Conrad

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

0

La sintaxis del bucle de enumeración de Ruby es diferente:

collection.each do |item|
...
end

Esto se lee como "una llamada al método 'each' de la instancia de objeto de matriz 'colección' que toma un bloque con 'blockargument' como argumento". La sintaxis de bloque en Ruby es 'do ... end' o '{...}' para declaraciones de una sola línea.

El argumento de bloque '| elemento |' es opcional, pero si se proporciona, el primer argumento representa automáticamente el elemento enumerado en bucle.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.