【问题标题】:F# map/set comprehensionsF# 映射/集合理解
【发布时间】:2011-12-03 09:41:22
【问题描述】:

我正在寻找类似于 Python 中的 dict/list/set 理解的东西。在 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# 中的这种东西是否有任何等效的语法(无论是在功能方面还是在整体整洁方面)?

【问题讨论】:

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


    【解决方案1】:

    有一个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

    【讨论】:

      【解决方案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)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-13
        • 1970-01-01
        • 2012-10-10
        • 2012-11-19
        • 2014-01-10
        • 2018-03-30
        相关资源
        最近更新 更多