Рубиновая сумма каждого значения индекса цикла - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть переменная @ Variable = [], она заполняется значениями ramdon при каждой итерации моего индекса, примерно так:

def whetever(array)
array.each_index {|i|
@variable=magic_ramdon_string_of_numbers_diferent_on_every_iteration
}
end

Я хочу создать еще один массив, суммирующий значения каждой итерации @ variable

Пример значений @variable:

i=0 @variable=[56,78,34,84]
i=1 @variable=[24,57,14,78]
i=2 @variable=[54,74,52,45]

Что я хочу это:

sum_variable=[56,78,34,84,24,57,14,78,54,74,52,45]

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Я бы написал так:

def whetever(array)
  sum_variable = (0...array.size).flat_map do |i|
    magic_ramdon_string_of_numbers_diferent_on_every_iteration
  end
end

flat_map вызывает блок каждого элемента последовательности, чтобы получить массив, и возвращает все массивы результатов, соединенные вместе. Здесь последовательность это диапазон 0...array.size, которые являются индексами массивов, если мы просто хотели сами элементы, такие как array[i], мы могли бы просто использовать array.flat_map, вместо этого.

0 голосов
/ 01 ноября 2018

Я бы сделал это, сначала определив sum_variable как пустой массив, а затем добавив к нему значения суммирования в каждой итерации цикла:

def whatever(array)
  sum_variable = []
  array.each_index do |i|
    @variable = magic_ramdon_string_of_numbers_diferent_on_every_iteration
    sum_variable << @variable.inject(:+)
  end
end

Обратите внимание, что если бы это было приложение Rails, а не просто vanilla ruby, то ActiveSupport также предоставляет метод Array#sum, который вы можете использовать вместо .inject(:+).

...