具有不同属性的数组的数组

时间:2017-05-23 03:53:12

标签: ruby

我有一个像这样的数组

array = [[Sat, 01 Jul 2017, 2.0],
         [Sat, 01 Jul 2017, 2.0],
         [Wed, 05 Jul 2017, 2.0],
         [Thu, 06 Jul 2017, 2.0],
         [Thu, 06 Jul 2017, 18.0],
         [Fri, 07 Jul 2017, 2.0],
         [Wed, 12 Jul 2017, 2.0],
         [Thu, 13 Jul 2017, 2.0],
         [Fri, 14 Jul 2017, 2.0],
         [Wed, 19 Jul 2017, 2.0],
         [Thu, 20 Jul 2017, 2.0],
         [Fri, 21 Jul 2017, 2.0],
         [Wed, 26 Jul 2017, 2.0],
         [Thu, 27 Jul 2017, 2.0],
         [Fri, 28 Jul 2017, 2.0]]

我想像这样转换这个数组

array = [[Sat, 01 Jul 2017, 4.0],
         [Wed, 05 Jul 2017, 2.0],
         [Thu, 06 Jul 2017, 20.0],
         [Fri, 07 Jul 2017, 2.0],
         [Wed, 12 Jul 2017, 2.0],
         [Thu, 13 Jul 2017, 2.0],
         [Fri, 14 Jul 2017, 2.0],
         [Wed, 19 Jul 2017, 2.0],
         [Thu, 20 Jul 2017, 2.0],
         [Fri, 21 Jul 2017, 2.0],
         [Wed, 26 Jul 2017, 2.0],
         [Thu, 27 Jul 2017, 2.0],
         [Fri, 28 Jul 2017, 2.0]]

1 个答案:

答案 0 :(得分:3)

array.group_by(&:first).map do |k, v|
  [k, v.reduce(0) { |memo, (_, v)| memo + v }]
end

array.map(&:dup)
     .group_by(&:shift)
     .map { |k, v| [k, v.flatten.reduce(&:+)] }

array.each_with_object(Hash.new(0)) do |(k, v), acc|
  acc[k] += v
end.to_a
相关问题