как перечислить непрерывные элементы в массиве? - PullRequest
1 голос
/ 03 ноября 2011

Например, у меня есть

arr = [1,2,3,4]

Если я позвоню arr.each, я получу доступ:

1
2
3
4

Но я хочу

1 2
2 3
3 4

Возможно ли это с помощью встроенной функции?Если нет, то какова лучшая практика?

Еще один вопрос: хочу ли я 1 2 и 3 4?

1 Ответ

5 голосов
/ 03 ноября 2011

Возможно, вы захотите посмотреть на each_cons для вашего первого случая:

(1..10).each_cons(3) {|a| p a}
# outputs below
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
[8, 9, 10]

Для вашего второго случая (требующего наборов элементов) вы должны использовать each_slice :

(1..10).each_slice(3) {|a| p a}
# outputs below
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10]

Любой из этих методов принимает одно целое число, определяющее размер набора, поэтому вы должны указать 2 вместо 3 (примеры прямо из документации).

...