为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Go 在一段结构中按时间求平均值

使用 Go 在一段结构中按时间求平均值

Go
慕雪6442864 2021-06-18 18:11:51
我正在以一种基本的方式在一个结构片段中按小时平均值,我会得到一个更好的方法来获得一个最通用的函数,它可以按小时、天、周等进行平均。提前致谢致所有人。package mainimport (    "fmt"    "math/rand"    "time")type Acc struct {    name  string    money int    date time.Time}type Accs []Accconst Tformat = "02/01/2006 15:04:05"func main() {    var myaccs Accs    acc := 0    var loops int    var hour int    f1, _ := time.Parse(Tformat, "29/08/2013 00:00:19")    // Creating a Slice of structs     for i := 0; i < 10; i++ {         f1 = f1.Add(20 * time.Minute) //adding 20 minutes to every record        myaccs = append(myaccs, Acc{name: "christian", money: rand.Intn(200), date: f1})        fmt.Printf("Added to slice: %v, %d, %s\n", myaccs[i].name, myaccs[i].money, myaccs[i].date)    }    // Averaging     for _, v := range myaccs {        if acc == 0 {            hour = v.date.Hour()            acc += v.money            loops++        } else {            if v.date.Hour() == hour {                acc += v.money                loops++            } else {                fmt.Printf("Average money value to hour %d : %d\n", hour, acc / loops) //->Action                acc = v.money                hour = v.date.Hour()                loops = 1            }        }        //fmt.Println(v, acc, loops, hour)    }    fmt.Printf("Average money value to hour %d : %d\n", hour, acc / loops)//->Action}注意:Money 变量只是一个像示例一样的 int .. 注意2:我正在考虑数据已经排序Playground:http : //play.golang.org/p/lL3YDD4ecE
查看完整描述

2 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

对于未排序的数据

首先在类型 Accs []Acc 上实现排序接口。然后,您可以轻松地按小时、天、周进行排序。

对于排序数据

在 Accs 上创建 GroupBy 方法。

func (accs Accs) GroupBy(p func(Acc,Acc) bool) [][]Accs {
    // your looping/comparing/grouping code goes here
    }

使用谓词函数 p 传入特定于组的代码,用于比较两个 Acc 结构以查看它们是否应该在同一组中。

将 Accs 分组后,您可以求和、平均等。


查看完整回答
反对 回复 2021-06-28
  • 2 回答
  • 0 关注
  • 312 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信