У меня есть массивцикл через массив, используя индекс
arr = [1,2,3,4,5]
и мне интересно, если есть способ, чтобы перебрать так что-то вроде:
i = 2
arr[3+n]
вернется 1
, а не nil
Возможно ли использование индекса или даже с помощью next
?
У меня есть массивцикл через массив, используя индекс
arr = [1,2,3,4,5]
и мне интересно, если есть способ, чтобы перебрать так что-то вроде:
i = 2
arr[3+n]
вернется 1
, а не nil
Возможно ли использование индекса или даже с помощью next
?
Выполните modulo по индексу, используя размер массива:
arr = [1, 2, 3, 4, 5]
arr[5 % arr.size] #=> 1
Это называется cycle:
c = [1,2,3,4,5].cycle
10.times{p c.next}
+1 Ницца. Поскольку 'cycle' просто возвращает Enumerator, вы можете сделать некоторые интересные вещи с помощью [' lazy'] (http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-lazy): '(1..5) .cycle.lazy.first (10)'. –
Это замечательно. Но почему это возвращает 10, а не 5? –
Другим вариантом является 'rotate' – hirolau
Я думаю, что это больше в соответствии с тем, что ОП ищет; Для меня похоже, что вопрос связан с индексом, который заканчивается с конца массива, и использование оператора mod исправит это. –
Это то, что я использовал. Работала отлично. Спасибо! –