Ruby: ¿Cómo iterar sobre un rango, pero en incrementos establecidos?

Así que estoy iterando en un rango como este:

(1..100).each do |n| # n = 1 # n = 2 # n = 3 # n = 4 # n = 5 end 

Pero lo que me gustaría hacer es iterar por 10’s.

Entonces, en lugar de boost n en 1, la siguiente n sería en realidad 10, luego 20, 30, etc. etc.

Vea http://ruby-doc.org/core/classes/Range.html#M000695 para la API completa.

Básicamente se utiliza el método step() . Por ejemplo:

 (10..100).step(10) do |n| # n = 10 # n = 20 # n = 30 # ... end 

Puedes usar Numeric#step

 0.step(30,5) do |num| puts "number is #{num}" end # >> number is 0 # >> number is 5 # >> number is 10 # >> number is 15 # >> number is 20 # >> number is 25 # >> number is 30 
 rng.step(n=1) {| obj | block } => rng 

Iteriza sobre rng, pasando cada elemento nth al bloque. Si el rango contiene números o cadenas, se utiliza el orden natural. De lo contrario, step invoca succ para iterar a través de los elementos de rango. El siguiente código utiliza la clase X, que se define en la documentación de nivel de clase.

 range = Xs.new(1)..Xs.new(10) range.step(2) {|x| puts x} range.step(3) {|x| puts x} 

produce:

 1 x 3 xxx 5 xxxxx 7 xxxxxxx 9 xxxxxxxxx 1 x 4 xxxx 7 xxxxxxx 10 xxxxxxxxxx 

Referencia: http://ruby-doc.org/core/classes/Range.html

……

Aquí hay otra manera, quizás más familiar de hacerlo:

 for i in (0..10).step(2) do puts i end 
Intereting Posts