我有各种时间序列,我想将它们关联起来并以 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/

10-17 01:43