如何简化此F#代码
难道没有更干净的方法吗如何简化此F#代码,f#,tuples,simplify,F#,Tuples,Simplify,难道没有更干净的方法吗 let Triplets = List.zip3 A B C let T1 (x, _, _) = x let T2 (_, x, _) = x let T3 (_, _, x) = x let Best = List.maxBy T3 Triplets T1 Best,T2 Best // return to C# code 主要的改进是使用模式匹配从元组中提取数据 我将使用以下内容(显示为名为myFunc的函数,我使用示例数据调用该函数以检查我对您意图的理解): 您
let Triplets = List.zip3 A B C
let T1 (x, _, _) = x
let T2 (_, x, _) = x
let T3 (_, _, x) = x
let Best = List.maxBy T3 Triplets
T1 Best,T2 Best // return to C# code
主要的改进是使用模式匹配从元组中提取数据 我将使用以下内容(显示为名为
myFunc
的函数,我使用示例数据调用该函数以检查我对您意图的理解):
您可以缩短myFunc
甚至将triplets
的定义导入List.maxBy
,但要以可读性为代价,如下所示:
let myFunc A B C =
match List.zip3 A B C |> List.maxBy (fun (_, _, x) -> x) with
| (a, b, _) -> (a, b)
phoog的建议将删除匹配项:
let myFunc A B C =
let (a, b, _) = List.zip3 A B C |> List.maxBy (fun (_, _, x) -> x)
(a, b)
这更适合于。@ildjarn不,不幸的是它不是。这段代码是一个精简的代码片段,这里没有任何上下文,也没有关于代码作用的描述,这被认为是“示例代码”,这是代码审查的主题之外的内容。我在这里是相当新的。你们是说我的问题不适合任何地方吗?我认为为一篇文章删去代码是一种很好的方式。至于代码的作用,我认为它合并3个列表,找到最大值并返回最大值的2个元素是不言而喻的。@JimLewis,您可能想告诉我们代码应该做什么(示例输入和预期输出)。然后,如果现有代码没有产生预期的结果,这就是StackOverflow的问题。如果代码可以工作但需要优化,那么CodeReview就可以了,但是您还应该告诉我们应该有什么样的优化:性能、可读性、消除无用的结构等等。@JimLewis Stack Overflow希望将代码精简到最低限度,而CodeReview则不需要。你可以在代码评审中发布真实的代码,并加入一些上下文,然后询问如何改进。另一个选项:
let(a,b,)=List.maxBy(fun(,,x)->x)a,b中的三元组
——当然,在多行示例中,将in
关键字替换为换行。
let myFunc A B C =
let (a, b, _) = List.zip3 A B C |> List.maxBy (fun (_, _, x) -> x)
(a, b)