F#中的Python样式集合



我正试图将一些用于财务分析处理的python代码重构为F#,但我很难复制一些我喜爱的python数据类型。例如,在Python中,我可以很高兴地声明这样一个变量:

timeSeries = { "20110131":1.5, "20110228":1.5, "20110331":1.5, 
               "20110431":1.5, "20110531":1.5 }

然后把它放在函数之间,但我不知道F#中的等价函数。我试过这个:

let timeSeries = ( ["20110131":1.5], ["20110228":1.5], ["20110331":1.5], 
                   ["20110431":1.5], ["20110531":1.5] )

但它当然失败了。。。我知道外面可能有人在哈哈大笑,但我对F#很陌生,与Python相比,它感觉很压抑。

我对.NET也很熟悉,只是F#似乎介于脚本和C#等"正确"语言之间,我还没有完全弄清楚如何有效地使用它——一切都需要很长时间。

老实说,Python中的字典声明与F#中的声明没有太大区别:

let timeSeries = dict [
             "20110131", 1.5; // ',' is tuple delimiter and ';' is list delimiter
             "20110228", 1.5;
             "20110331", 1.5; 
             "20110431", 1.5; 
             "20110531", 1.5; // The last ';' is optional
             ]

因为:用于F#中的类型注释,所以您无法重新定义它。但您可以创建一个自定义的中缀运算符,使代码更可读,更接近于您在Python:中通常所做的操作

let inline (=>) a b = a, b
let timeSeries = dict [
         "20110131" => 1.5;
         "20110228" => 1.5;
         "20110331" => 1.5; 
         "20110431" => 1.5; 
         "20110531" => 1.5;
         ]

您可能会发现这个答案很有用。看起来你想要一本字典。如果您还不知道,F#支持类似于Python生成器表达式的东西,称为序列表达式[MSDN],您可能也会发现它很有用。例如:

let d = dict [ for i in 0 .. 10 -> i, -i ]

最新更新