【问题标题】:Summing Values in a Ruby Array对 Ruby 数组中的值求和
【发布时间】:2020-07-11 21:37:29
【问题描述】:

我正在尝试对平均整数数组求和。

我的助手中有以下类以及它们返回的数组示例:

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(:+)

【问题讨论】:

  • 也许您想更清楚地提供输入数据和预期输出?

标签: arrays ruby


【解决方案1】:

你也许可以,

obj = arrays.flatten.each_slice(2).with_object(Hash.new(0)) do |slice, obj| 
  obj[slice[0]] += slice[1]
end.to_a 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2022-07-20
    • 2016-09-05
    • 2010-12-05
    • 1970-01-01
    • 2014-07-28
    相关资源
    最近更新 更多