获得多个模式匹配

时间:2016-11-27 06:35:52

标签: f# functional-programming pattern-matching

我有以下元组列表(即注意fit2_summ$coefficients[,4];):

,

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

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

我有一些问题无法修复:

  1. 我只收到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 & 匹配元组的一个 a,忽略任何其他匹配
  2. 我不得不寻找三个案例(中间的元组,开头和列表的结尾),这是非常详细的IMO
  3. 有什么方法可以解决这些问题吗? (有没有办法获得多个匹配,并且无论列表中的元组位置如何都匹配?)

1 个答案:

答案 0 :(得分:3)

每个元组都是列表中的一个元素,因此如果您希望第一个“part”的所有元素都为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)