F# 映射/集合推导式

2 投票
2 回答
571 浏览
提问于 2025-04-17 03:55

我在寻找类似于Python中的字典、列表和集合推导式的东西。在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}

来生成字典。在F#中有没有类似的写法,既能实现相同的功能,又能保持代码的整洁呢?

2 个回答

3

简单来说,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)]
5

有一个叫做 set 的函数,它可以接受 seq<_> 这样的参数,所以你可以这样使用:

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

对于 dict 也是一样的。这里有相关的文档链接:

set: http://msdn.microsoft.com/en-us/library/ee353747.aspx
dict: http://msdn.microsoft.com/en-us/library/ee353774.aspx

撰写回答