我有各种时间序列,我想将它们关联起来并以 csv 文件或内存数据表 (.NET) 的形式呈现。这些时间序列是时间值对的数组(实际上这些对象包含的不仅仅是时间和值)。时间序列可能跨越不同的重叠时期,有些甚至可能有漏洞(给定时间戳的缺失值)。
对于那些感兴趣的人,我正在使用 OPC HDA .NET 库从 OPC HDA 服务器中提取历史时间序列。
生成的数据表应该为每个时间序列包含一列,所有这些都基于时间戳列按时间顺序排列。请参阅下面的示例:
|-------|-------|-------|-------|-------|
TIME TS1 TS2 TS3 TS4
|-------|-------|-------|-------|-------|
1 X X X
|-------|-------|-------|-------|-------|
2 X X X X
|-------|-------|-------|-------|-------|
3 X X X
|-------|-------|-------|-------|-------|
4 X X X
|-------|-------|-------|-------|-------|
5 X X X
|-------|-------|-------|-------|-------|
实现这一目标的最有效方法是什么? “有效”是指使用最少的代码。但考虑到时间序列可能变得非常大,内存使用也可能是一个问题。
最佳答案
您可能会使用嵌套字典之类的数据结构并迭代内容:
Dictionary <TimeSeries, Dictionary<DateTime, Value>> dict = new Dictionary<TimeSeries, Dictionary<DateTime, Value>>();
foreach (TimeSeries series in dict.Keys) {
//table row output code goes here
Dictionary<DateTime, Value> innerDict = dict[series];
foreach (DateTime date in innerDict.Keys) {
Value seriesValueAtTimeT = innerDict[date];
//table column output code goes here
}
}
根据您的需要,您的输出代码写入其他内容的位置,然后将数据类型 TimeSeries、Value 等替换为您的实际数据类型。
关于c# - 时间序列和相关策略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1019907/