2013-12-05 4 views

ответ

2

Выполните modulo по индексу, используя размер массива:

arr = [1, 2, 3, 4, 5] 
arr[5 % arr.size] #=> 1 
+0

Я думаю, что это больше в соответствии с тем, что ОП ищет; Для меня похоже, что вопрос связан с индексом, который заканчивается с конца массива, и использование оператора mod исправит это. –

+0

Это то, что я использовал. Работала отлично. Спасибо! –

3

Это называется cycle:

c = [1,2,3,4,5].cycle 
10.times{p c.next} 
+2

+1 Ницца. Поскольку 'cycle' просто возвращает Enumerator, вы можете сделать некоторые интересные вещи с помощью [' lazy'] (http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-lazy): '(1..5) .cycle.lazy.first (10)'. –

+0

Это замечательно. Но почему это возвращает 10, а не 5? –

+0

Другим вариантом является 'rotate' – hirolau

Смежные вопросы