Начните цикл с 1
Недавно я натолкнулся на страшную идею о том, что Integer.count
петли в Ruby начинаются с 0
и переходят к n-1
во время игры с головоломками Facebook Engineering. Я сделал грязное исправление добавления одного к переменной блока в начале, чтобы он начинался с одного вместо.
Есть ли более красивый способ?
Пример:
10.times do |n|
n += 1
puts n
end #=> 012345789
Ответы
Ответ 1
Ruby поддерживает несколько способов подсчета и циклирования:
1.upto(10) do |i|
puts i
end
>> 1.upto(10) do |i|
> puts i
| end #=> 1
1
2
3
4
5
6
7
8
9
10
Там также step
вместо upto
, который позволяет вам увеличивать значение шага:
>> 1.step(10,2) { |i| puts i } #=> 1
1
3
5
7
9
Ответ 2
Вы можете использовать range:
(1..10).each { |i| puts i }
Диапазоны дают вам полный контроль над начальными и конечными индексами (если вы хотите перейти от более низкого значения к более высокому значению).
Ответ 3
Try
(1..10).each do |i|
# ... i goes from 1 to 10
end
вместо этого. Это также легче читать, когда имеет значение i
.
Ответ 4
Конечно, while
-loop:
i = 1
while i<=10 do
print "#{i} "
i += 1
end
# Outputs: 1 2 3 4 5 6 7 8 9 10
Ответ 5
Старый, но это может быть что-то, что кто-то ищет..
5.times.with_index(100){|i, idx| p i, idx};nil
#=>
0
100
1
101
2
102
3
103
4
104