Ruby: ¿Cómo iterar sobre un rango, pero en incrementos establecidos?
Así que estoy iterando sobre un rango así:
(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.
Así que en lugar de aumentar n
por 1, el siguiente n
sería realmente 10, luego 20, 30, etc etc.
4 answers
Véase 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-03 14:15:18
Puede utilizar 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-24 22:09:09
rng.step(n=1) {| obj | block } => rng
Itera sobre rng, pasando cada enésimo elemento 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 elementos de rango. El siguiente código utiliza la clase Xs, 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
......
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-05 10:31:19
Aquí hay otra forma, quizás más familiar de hacerlo:
for i in (0..10).step(2) do
puts i
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-11 20:10:10