如何根据日期过滤集合并将其分配给地图

时间:2016-05-29 19:18:16

标签: go

我有一个表示购买的结构:

type Purchase struct {
  id int64
  UserId int64
  CreatedAt  time.Time
}

现在我有这些购买的集合。

在UI方面,我这样做:

  1. 获取当前日期,并显示最近2周的日期。
  2. 如果购买的日期属于某个日期,请将其显示出来。
  3. 所以它看起来像:

    Sunday May 29th
    - date/timestamp purchase id, amount, etc.
    - date/timestamp purchase id, amount, etc.
    Saturday May 28th
    - date/timestamp purchase id, amount, etc.
    Friday May 27th
    ..
    ..
    (past 2 weeks).
    

    所以我的算法是:

    1. 获取当前日期
    2. 使用当前日期,循环前两周并搜索我的Products集合,如果CreatedAt是给定日期,则将其插入集合中
    3. 在UI方面,循环遍历此集合,其中键是日期
    4. 所以当前日期是:

      t := time.Now()
      

      如何遍历过去2周,然后将其插入地图。

      您建议使用更好的算法吗?

1 个答案:

答案 0 :(得分:0)

一种方法可能是将条目排列在时间序列结构中,并使用它来在某个时间间隔内过滤所需的条目。我们可能会使用map [timestamp_bucket] []购买地图。时间戳桶可以被计算为(time_stamp_corresponding_to_purchase_date_in_second - (time_stamp_corresponding_to_purchase_date_in_second%3600))。基本上,我们以小时为单位安排购买。当我们想要购买最后两周时,我们只计算过去两周内的time_bucket密钥,并从地图中相应的存储桶中检索购买。如果我们想要使用任意时间间隔来过滤记录,我们可以保持slice [] Purchase按需要排序。