Начать цикл с 1 - PullRequest
       22

Начать цикл с 1

40 голосов
/ 25 апреля 2011

Недавно мне пришла в голову пугающая идея, что циклы Integer.count в Ruby начинаются с 0 и переходят к n-1 во время игры с головоломками Facebook Engineering. Я сделал грязное исправление, добавив единицу в переменную блока в начале, чтобы она начиналась с единицы.

Есть ли более красивый способ?

Пример:

10.times do |n|
    n += 1
    puts n
end #=> 012345789

Ответы [ 5 ]

88 голосов
/ 25 апреля 2011

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
24 голосов
/ 25 апреля 2011

Вы можете использовать диапазон :

(1..10).each { |i| puts i }

Диапазоны дают вам полный контроль над начальным и конечным индексами (если вы хотите перейти от более низкого значения к более высокомузначение).

8 голосов
/ 25 апреля 2011

Попробуйте

(1..10).each do |i|
 #  ... i goes from 1 to 10
end

.Также легче читать, когда значение i имеет значение.

2 голосов
/ 07 ноября 2017

Старый, но это может быть что-то, что кто-то ищет ..

5.times.with_index(100){|i, idx| p i, idx};nil
#=>
    0
    100
    1
    101
    2
    102
    3
    103
    4
    104
2 голосов
/ 30 мая 2016

Есть, конечно, while -петл:

i = 1
while i<=10 do
  print "#{i} "
  i += 1
end
# Outputs: 1 2 3 4 5 6 7 8 9 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...