什么';在F#中使用模式匹配的最佳方法是什么?
生成一个包含两个参数的函数,一个整数和一个五元素整数元组,如果元组中任意三个元素的和大于第一个参数,则返回true,否则返回false什么';在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表达式实际上没有
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谢谢