TonyChyi

我在那一角落患过抽风

实现一个类似RRDTool的算法
2016年05月06日 文章
RRDTool 中有一种算法: 每周的数据按每天汇总 每月的数据按每周汇总 每年的数据按每月汇总 或者说实现以下需求: 时间在三个月以内的,保留全部 时间在3-6个月的,每天保留一个 时间在6-9个月的,每周保留一个 基本的思路如下: 选取所定义的时间范围的所有内容a[],时间差为s 将a[0]定义为基准元素 遍历元素,与基准元素时间差< s的,删除 与基准元素时间差>= s的,该元素成为新的基准元素 以下是一个演示程序,生成一个1-100的数组,然后按照一定的策略删除(置0)其中的元素。 package main import ( "fmt" ) var a []int func init() { for i := 1; i <= 100; i++ { a = append(a, i) } } func main() { fmt.Println("Origin:", a, "\n") b := make([]int, 0) baseLine := a[0] // 基准值 for i, _ := range a { if i < 10 { b = append(b, a[i]) baseLine = a[i] continue } if i >= 10 && i < 30 { if a[i]-baseLine >= 2 { baseLine = a[i] // 更新基准值 b = append(b, a[i]) continue } a[i] = 0 } if i >= 30 && i <= 50 { if a[i]-baseLine >= 5 { baseLine = a[i] b = append(b, a[i]) continue } a[i] = 0 } if i >= 50 { if a[i]-baseLine >= 10 { baseLine = a[i] b = append(b, a[i]) continue } a[i] = 0 } } fmt.
Tags: #Go · #RRDTool

 

TonyChyi © 2018 GPLv2