F#map / set comprehensions

时间:2011-10-08 01:49:25

标签: python f# functional-programming list-comprehension

我正在寻找类似于Python中的dict / list / set comprehensions的东西。在Python中你可以这样做:

[x+2 for x in list if x > 10]

和F#

[for x in list do if x > 10 yield x+2]

但在Python中,你也可以这样做:

{x+2 for x in list if x > 10}

生成集合,

{k: (v+10)/2 for k, v in list.items() if k > 5}

生成Dicts。在F#中是否存在任何等效(在功能方面和整体整洁方面)语法?

2 个答案:

答案 0 :(得分:4)

有一个set函数接受seq<_>,所以你可以这样做:

set [for x in list do if x > 10 yield x+2]

dict相同。以下是相关文档:

sethttp://msdn.microsoft.com/en-us/library/ee353747.aspx
dicthttp://msdn.microsoft.com/en-us/library/ee353774.aspx

答案 1 :(得分:2)

基本上F#没有特殊的语法,但您可以使用数组或列表推导,并将结果传递给提供给标准库的函数。

let intSet = set [for x in list do if x > 10 yield x+2]


let intMap = dict [for (x, y) in list do if x > 10 yield (x,y+2)]