【问题标题】:Get multiple pattern matches获取多个模式匹配
【发布时间】:2017-04-11 02:50:58
【问题描述】:

我有以下元组列表(即注意;,):

let nodes = [0, 1, 394; 0, 2, 4; 1, 3, 50; 1, 2, 5; 2, 3, 600]

我想找到列表中第一个元素 = 0 的所有元组,所以我进行以下模式匹配:

match nodes with
| [_; 0, a, b; _] | [_; 0, a, b] | [0, a, b; _] -> doStuff a b  //a tuple of the form (0, _, _) was found in the list 
| _ -> doOtherStuff //no matches found

有几个我无法解决的问题:

  1. 我只得到一个匹配元组的a & b,任何其他匹配都被忽略
  2. 我不得不寻找三个案例(列表中间的元组、列表的开头和结尾),这在 IMO 中非常冗长

有什么办法可以解决这些问题? (有没有办法获得多个匹配项,并且无论元组在列表中的位置如何都可以匹配?)

【问题讨论】:

    标签: f# functional-programming pattern-matching


    【解决方案1】:

    每个元组都是列表的一个元素,因此如果您想要第一个“部分”为 0 的所有元素,只需使用该谓词过滤您的列表

    nodes
    |> List.filter (fun (x, _, _) -> x = 0)
    |> List.map (fun (_, a, b) -> doStuff a b)
    

    或者,如果在每种情况下都有一些事情要做(第一部分为 0 时,您可以直接使用内部的模式匹配进行映射

    nodes
    |> List.map (function (0, a, b) -> doStuff a b)
                        | _         -> doOtherStuff)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多