【发布时间】:2012-12-19 13:30:15
【问题描述】:
我有历史股票数据的大数据文件,我想通过 C# GUI 加载这些文件,然后在 F# 中使用不同的算法进行处理。随着时间的推移,附加值会附加到列表中。
列表是二维的,格式为
[[id, Open,High,Low,Close], [id, Open,High,Low,Close], ...]
F# 代码在库中,无法使用 C# 列表(我无法在 F# 中获取列表第二维的值)。每次发生 F# 操作时都转换整个列表,成本太高。这些值也不能存储在 F# 列表中,因为 C# 无法处理它们。
建议的解决方案是:
在 C# 中存储 F# 列表,仅出于存储目的,因为库无法存储值,以及包含相同值的 C# 列表,根据需要转换部分列表。这里的主要问题是文件的大小可能是数 GB。
直接从 F# 文件中读取所需的值并将计算值保存在其他文件中。这里的问题是文件的有效组织,以便可以快速选择要加载的行(例如,用于移动平均计算)。
【问题讨论】:
-
有关如何无法访问嵌套值的更多详细信息?是
System.Generics.List<T>吗? -
F# 可以很好地处理 C# 列表(例如,F#
seq<T>只是IEnumerable<T>的别名)。 C# 也可以使用 F# 列表,您只需要引用FSharp.Core,然后您就可以使用Microsoft.FSharp.Collections.ListModule.OfSeq()。 -
C# 中的类型为
System.Generics.List<System.Generics.List<Double>>,并作为IEnumerable传递给F#。不是调用OfSeq()转换列表值,迫使我循环遍历整个列表,在每个元素上调用OfSeq(),从而复制它。因为我有一个二维列表,所以这样做意味着我必须先转换列表,然后再单独转换每个元素。 -
你能用
Seq.cast吗?例如。Seq.cast<List<Double>> enumerable(未经测试) -
有什么理由需要列表而不是数组吗? C# 数组也有完整的 F# 支持。
标签: c# list dll f# data-exchange