每分钟创建一个新缓冲区

时间:2014-12-11 14:55:18

标签: system.reactive

给定一个包含时间戳的值的可观察序列如何将序列缓冲到每个包含一分钟数据的新缓冲区?缓冲区必须在新分钟开始时准确关闭..

由于

1 个答案:

答案 0 :(得分:3)

假设您的值序列已按时间戳排序,您可以使用GroupByUntil按分钟对它们进行分组。在此示例中,我将每个组转换为List

// Utility method from:
// http://stackoverflow.com/a/10100259/674326
DateTime RoundDown(DateTime dt, TimeSpan d)
{
    return new DateTime((dt.Ticks / d.Ticks) * d.Ticks);
}

//...
var sequence = // ...
var interval = TimeSpan.FromMinutes(1);
var intervalBuffers = sequence
    .Publish(items => items.GroupByUntil(
        item => RoundDown(item.TimeStamp, interval),
        grp => items.Where(item => grp.Key != RoundDown(item.TimeStamp, interval))))
    .Select(grp => grp.ToList());