как перечислить непрерывные элементы в массиве?

#ruby #enumerable

#ruby #перечисляемый

Вопрос:

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

 arr = [1,2,3,4]
  

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

 1
2
3
4
  

Но я хочу

 1 2
2 3
3 4
  

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

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

Комментарии:

1. стандартный совет: внимательно прочитайте документы String / Array / Enumerable: ruby-doc.org/core-1.9.2/Enumerable.html

Ответ №1:

Вы, вероятно, хотите посмотреть на 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 (примеры взяты прямо из документации).