Повторение цикла, когда оно достигает конца - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь осмыслить итерацию двух циклов

numbers_array = [1,2,3,4,5,6,7,8,9,10]
add_to_array = [1,2,3,4]

В то время как numbers_array повторяется, add_to_array выполняет итерацию, одновременно добавляя оба элемента одновременно.Предупреждение, когда add_to_array достигает конца, начинается с добавления его элемента к следующему индексу в numbers_array.Таким образом, в numbers_array[4] мы добавим add_to_array[0], затем добавим numbers_array[5] к add_to_array[1] и так далее.Этот процесс будет повторяться до тех пор, пока мы не достигнем конца numbers_array.

Любой вклад будет принят с благодарностью!

Ответы [ 4 ]

0 голосов
/ 27 августа 2018

Другой вариант:

numbers_array.map { |e| e + add_to_array.rotate!.last }

# => [2, 4, 6, 8, 6, 8, 10, 12, 10, 12]

Недостаток: add_to_array изменен на rotate!

0 голосов
/ 27 августа 2018

Вы ищете Enumerable#zip и Enumerable#cycle:

numbers_array = [1,2,3,4,5,6,7,8,9,10]
#⇒ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
add_to_array = [1,2,3,4]
#⇒ [1, 2, 3, 4]
numbers_array.zip(add_to_array.cycle)
#⇒  [[1, 1], [2, 2], [3, 3], [4, 4], [5, 1],
#    [6, 2], [7, 3], [8, 4], [9, 1], [10, 2]]

Теперь делайте что хотите с возвращенным массивом.Например, чтобы уменьшить элементы суммирования с заархивированными результатами, отобразите ro Enumerable#sum:

numbers_array.zip(add_to_array.cycle).map(&:sum)
#⇒ [2, 4, 6, 8, 6, 8, 10, 12, 10, 12]
0 голосов
/ 27 августа 2018
add_to_array.zip(*numbers_array.each_slice(add_to_array.size)).
             map { |a| a.sum { |e| e.to_i } }
  #=> [16, 20, 13, 16]

e.to_i необходимо для преобразования nil значений в нули.См. NilClass # to_i .

0 голосов
/ 27 августа 2018

Он работает с использованием оператора % для циклического перемещения по индексам.

numbers_array = [1,2,3,4,5,6,7,8,9,10]
add_to_array = [1,2,3,4]

numbers_array.map.with_index do |n, i|
  n + add_to_array[i % add_to_array.length]
end

Классный метод, который похож, если бы вы не хотели начинать сначала со следующего массива, был бы .zip

https://apidock.com/ruby/Array/zip

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...