我正在尝试重构一些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#之类的“适当”语言之间,我还没有完全理解如何有效地使用它 - 一切都需要很长时间。
答案 0 :(得分:9)
老实说,你在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;
]
答案 1 :(得分:2)
您可能会发现this answer有帮助。看起来你想要一本字典。如果您还不知道,F#支持类似于Python的生成器表达式的东西,称为sequence expressions [MSDN],您可能也会发现它很有用。例如:
let d = dict [ for i in 0 .. 10 -> i, -i ]