我想找到两个列表中最长的一个.请考虑以下代码示例:
let xs = ['B']
let ys = ['A'; 'B']
let longest = max xs ys
printfn "%A" longest
Run Code Online (Sandbox Code Playgroud)
与我的期望相反,该计划的产出['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
Run Code Online (Sandbox Code Playgroud)
结果:
Run Code Online (Sandbox Code Playgroud)val longest : char list = ['A'; 'B']