gpt4 book ai didi

c# - 在 C# 和 F# 之间交换大列表

转载 作者:行者123 更新时间:2023-11-30 21:01:41 24 4
gpt4 key购买 nike

我有历史股票数据的大数据文件,我想通过 C# GUI 加载这些文件,然后在 F# 中使用不同的算法进行处理。随着时间的推移,附加值会附加到列表中。

列表是二维的,形式如下

[[id, Open,High,Low,Close], [id, Open,High,Low,Close], ...]

F# 代码在库中,无法使用 C# 列表(我无法在 F# 中获取列表第二维的值)。每次执行 F# 操作时都转换整个列表,成本太高。这些值也不能存储在 F# 列表中,因为 C# 无法处理它们。

建议的解决方案是:

  1. 在 C# 中存储一个 F# 列表(仅用于存储目的,因为该库无法存储值)以及包含相同值的 C# 列表,并根据需要转换部分列表。这里的主要问题是文件的大小可能达到数 GB。

  2. 直接从 F# 文件中读取所需的值,并将计算出的值保存在其他文件中。这里的问题是文件的有效组织,以便可以快速完成选择要加载的行(例如,用于移动平均计算)。

最佳答案

内部序列是否必须是一个列表?如果它始终具有相同的元素 (OHLC),则最好使用元组(或自定义类型),因为它明确了其固定性质。我可能会做这样的事情:

module Stock =
let (!) s = DateTime.Parse(s)

let getOHLC() : unit -> seq<DateTime * float * float * float * float> =
seq [
!"18-Dec-12",27.25,27.63,27.14,27.56
!"17-Dec-12",26.79,27.22,26.68,27.10
!"14-Dec-12",27.11,27.13,26.70,26.81
//...
]

如果你真的需要每个元素都是一个列表,你可以通过 Seq.map seq 来传递它。

seq 函数定义为:

let seq (x:seq<'T>) = x

所以它只向上转换,不复制。

关于c# - 在 C# 和 F# 之间交换大列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13953488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com