什么';在F#中使用模式匹配的最佳方法是什么?

什么';在F#中使用模式匹配的最佳方法是什么?,f#,pattern-matching,tuples,inline,F#,Pattern Matching,Tuples,Inline,生成一个包含两个参数的函数,一个整数和一个五元素整数元组,如果元组中任意三个元素的和大于第一个参数,则返回true,否则返回false let func el tupl = match tupl with |(a,b,c,d,e) when (a+b+c) > el || (a+d+e) > el || (b+c+d)> el || (b+c+e) > el -> true | _-> false 使用显式的match表达式实际上没有

生成一个包含两个参数的函数,一个整数和一个五元素整数元组,如果元组中任意三个元素的和大于第一个参数,则返回true,否则返回false

let func el tupl =
    match tupl with
    |(a,b,c,d,e) when (a+b+c) > el || (a+d+e) > el || (b+c+d)> el || (b+c+e) > el -> true
    | _-> false

使用显式的
match
表达式实际上没有什么好处。在这种情况下,您可以使用
when
来解决问题,正如您在问题中所建议的那样,但这会给您带来很多思考负担

这里有一个替代方案:

let inline func el (a,b,c,d,e) =
    let sum3 = 
        [a; b; c; d; e] // create a list of elements
        |> List.sortDescending // sort list by descending
        |> List.take 3 // take the 3 largest elements
        |> List.sum // sum them
    sum3 > el // if not true for 3 largest, it's not true for any

注意:我使函数
内联
,因此它可以与支持
比较
+
的任何类型一起工作。您可以删除
inline
并只接受,例如
int
s

你能不能把5元组转换成一个数组,对它进行排序,然后检查数组中最后三个数字的和?你能告诉我如何。。。我还是一个F#的孩子,你也忘了
a+b+d
a+b+e
…一般来说,如果不同的元素没有各自不同的含义,不要使用元组,而是使用列表或数组。元组不是集合,如果用作元组,则很难使用。#TeaDrivenDev谢谢