【发布时间】:2014-12-11 23:37:20
【问题描述】:
给定一个包含时间戳的可观察序列,我如何将序列缓冲到每个包含一分钟数据的新缓冲区中?缓冲区必须在新的一分钟开始时准确关闭..
谢谢
【问题讨论】:
标签: system.reactive
给定一个包含时间戳的可观察序列,我如何将序列缓冲到每个包含一分钟数据的新缓冲区中?缓冲区必须在新的一分钟开始时准确关闭..
谢谢
【问题讨论】:
标签: system.reactive
假设您的值序列已经按时间戳排序,您可以使用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());
【讨论】: