Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何简化此F#代码_F#_Tuples_Simplify - Fatal编程技术网

如何简化此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)