F# 映射/集合推导式
我在寻找类似于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