gpt4 book ai didi

ruby 。如果日期相等,则获取数组的平均值

转载 作者:数据小太阳 更新时间:2023-10-29 07:59:51 24 4
gpt4 key购买 nike

我有一个数组

[
[3, "2014-06-28"],
[3, "2014-06-29"],
[3, "2014-06-30"],
[27, "2014-07-02"],
[7, "2014-07-02"]
]

如果日期相等,我想得到它们的平均值,这样上面的数组就会变成

[
[3, "2014-06-28"],
[3, "2014-06-29"],
[3, "2014-06-30"],
[17, "2014-07-02"],
]

数组已经按日期排序。

我该怎么做?我是否使用递归函数?

最佳答案

arr = [
[3, "2014-06-28"],
[3, "2014-06-29"],
[3, "2014-06-30"],
[27, "2014-07-02"],
[7, "2014-07-02"]
]

arr.group_by(&:last).map do |k, vs|
av = vs.map(&:first).inject(:+) / vs.size.to_f
[av, k]
end

#=> [
#=> [3.0, "2014-06-28"],
#=> [3.0, "2014-06-29"],
#=> [3.0, "2014-06-30"],
#=> [17.0, "2014-07-02"]
#=> ]

如果您正在寻找更优化但不那么惯用的解决方案(并且您的数据集按日期排序),您可以按照以下步骤操作:

arr = [
[3, "2014-06-28"],
[3, "2014-06-29"],
[3, "2014-06-30"],
[27, "2014-07-02"],
[7, "2014-07-02"]
]

res = []
tmp = [0]
cnt = 0
arr.each do |num, date|
if tmp[1] && tmp[1] != date
tmp[0] /= cnt.to_f
res << tmp
tmp = [0]
cnt = 0
end
tmp[0] += num
tmp[1] = date
cnt += 1
end
tmp[0] /= cnt.to_f
res << tmp
res

#=> [
#=> [3.0, "2014-06-28"],
#=> [3.0, "2014-06-29"],
#=> [3.0, "2014-06-30"],
#=> [17.0, "2014-07-02"]
#=> ]

关于 ruby 。如果日期相等,则获取数组的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24550319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com