gpt4 book ai didi

f# - 为什么 max(Operator) 不返回最长列表?

转载 作者:行者123 更新时间:2023-12-02 10:36:42 24 4
gpt4 key购买 nike

我想找到两个列表中最长的一个。考虑以下代码示例:

let xs = ['B']
let ys = ['A'; 'B']
let longest = max xs ys
printfn "%A" longest

与我的预期相反,该程序的输出是 ['B']而不是['A'; 'B'] .

为什么 List<'T> 实现 max 这边走?这个实现到底是如何/在哪里定义的?

我可以看到max需要comparison ,我认为这意味着 IComparable 的实现。 List<'T>通过使用 StructuralComparison 自动执行此操作属性。但是这个自动实现是什么样子的呢?

我可以用来获取两个列表中最长的一个的最简洁的替代方案是什么?

最佳答案

F# 逐个元素地比较列表。由于 'B' > 'A' 因此它会考虑第一个列表 > 第二个列表(字典顺序)并中断进一步的比较。您可以使用列表上的 .Length 属性来比较长度。例如这样;

let longest = if xs.Length > ys.Length then xs else ys

结果:

val longest : char list = ['A'; 'B'] 

关于f# - 为什么 max(Operator) 不返回最长列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30490211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com