我在 C# 中遇到一个问题,我不知道如何解决:
我有一组由时间戳和值组成的数据。 这是一个示例数据集:
<Timestamp>2014-01-06T17:40:08.000Z</TimeStamp>
<Value>200</Value>
<Timestamp>2014-01-06T17:40:09.000Z</TimeStamp>
<Value>234</Value>
<Timestamp>2014-01-06T17:40:11.000Z</TimeStamp>
<Value>214</Value>
<Timestamp>2014-01-06T17:40:12.000Z</TimeStamp>
<Value>264</Value>
<Timestamp>2014-01-06T17:40:13.000Z</TimeStamp>
<Value>300</Value>
<Timestamp>2014-01-06T17:40:15.000Z</TimeStamp>
<Value>276</Value>
我需要做的是以某种方式每 30 秒获取一次值的平均值。请注意,数据记录不一定是每秒记录。这让我很难想象如何在不保证结果不安全的情况下做到这一点。
这可以通过 LINQ 语句实现吗?或者您还有其他建议吗?
最佳答案
假设您可以弄清楚如何解析 XML,并且您有一个包含 Time
和 Value
的对象集合。例如,我将使用这个集合:
var now = DateTime.Now;
var random = new Random();
var times = Enumerable.Range(1, 10000).Select(i => new
{
Time = now.AddHours(random .NextDouble()),
Value = i
});
使用辅助方法 DateTime RoundUp(DateTime dt, TimeSpan d)
,和GroupBy
:
var interval = TimeSpan.FromSeconds(30);
var intervalAverageValues =
times.GroupBy(t => RoundUp(t.Time, interval))
.Select(g => new
{
AverageValue = g.Average(t => t.Value),
IntervalEndTime = g.Key,
Count = g.Count()
});
关于c# - 使用 LINQ 创建数据间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21258167/