Суммирование значений в массиве Ruby - PullRequest
0 голосов
/ 12 июля 2020

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

В моем помощнике есть следующие классы с примером возвращаемого ими массива:

def day_of_week_yard_activity
    YardActivity.group_by_day_of_week(:date, format: "%A").joins(:line_transactions)
end

def full_deliver_avg
   day_of_week_yard_activity.average(:full_deliver).map { |d,n| [d, n.to_f.round]}
end
def full_recieve_avg
   day_of_week_yard_activity.average(:full_recieve).map { |d,n| [d, n.to_f.round]}
end
def empty_recieve_avg
   day_of_week_yard_activity.average(:empty_recieve).map { |d,n| [d, n.to_f.round]}
end
def empty_deliver_avg
   day_of_week_yard_activity.average(:empty_deliver).map { |d,n| [d, n.to_f.round]}
end => [["Sunday", 0], ["Monday", 1], ["Tuesday", 2], ["Wednesday", 1], ["Thursday", 2], ["Friday", 1], ["Saturday", 0]]

Я пробовал следующие, чтобы сгруппировать каждую позицию [0] и суммировать позицию [1] вместе, но я получаю случайную позицию [0] назад:

  def averaged_summed_total_transactions
    [full_deliver_avg, full_recieve_avg, full_deliver_avg, empty_deliver_avg].group_by(&:first).map { |d,n| [d, n.map(&:last).inject(:+)]}
  end
=> [[["Sunday", 0], ["Saturday", 0, "Saturday", 0, "Saturday", 0, "Saturday", 0]]]

Я ожидаю получить массив, аналогичный следующее:

[["Sunday", 0], ["Monday", 4], ["Tuesday", 8], ["Wednesday", 4], ["Thursday", 8], ["Friday", 4], ["Saturday", 0]]

Я думаю, что неправильно понимаю group_by(&:first) и / или (&:last).inject(:+).

1 Ответ

0 голосов
/ 12 июля 2020

Возможно, вы сможете,

obj = arrays.flatten.each_slice(2).with_object(Hash.new(0)) do |slice, obj| 
  obj[slice[0]] += slice[1]
end.to_a 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...