Как рассчитать итоговую сумму элементов массива? - PullRequest
2 голосов
/ 03 января 2012

Я работаю в Rails 3.1 как относительный нуб, и мне удалось извлечь пользовательские суммы транзакций из БД в упорядоченный по дате массив, используя этот код (где date и amount_cents являются атрибутами db):

@ user_trans = User.transactions.order ("дата"). Map {| t | t.amount_cents}

=> [1000, -350, -250, 600, 750, -450]

Я легко получаю общий массив с:

@user_trans.sum => 1300

Но то, что я просто не могу понять, - это элегантный способ перебора каждого элемента массива и добавления первого элемента ко второму, второму к третьему и т. Д., Что приводит к получению итоговых значений:

[1000, 650, 400, 1000, 1750, 1300]

Кажется, что .each или .inject были бы используемым методом, но кроме неуклюжего многострочного хака, я не нашел магического синтаксиса, чтобы сделать это, но, похоже, должен быть оптимизированный подход. Заказ важен. Может быть, регресс от общего, а затем наоборот?

Я сижу у ваших ног с обнадеживающим ожиданием ...:)

1 Ответ

5 голосов
/ 03 января 2012

Вот одна строка. to_i необходим для обработки первого элемента, в котором массив результатов пуст (nil.to_i будет иметь значение 0).

@user_trans.inject([]) { |result, element| result << result.last.to_i + element }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...