如何获取列表中最长子列表的长度?我花了很多时间在这上面,我一点也不知道。
例如:
Function([[1;2];[1;2;3];[]])
返回3
答案 0 :(得分:4)
我对OCaml很生疏,但List.fold_left
应该足够了:
List.fold_left (fun a b -> Pervasives.max a (List.length b)) 0 [[1;2];[1;2;3];[]]
我现在无法测试代码,自从我上次使用OCaml(版本3.XX)以来已经很长时间了,所以语法可能有点不同,但这种方法肯定有效:你传递给折叠一个函数将当前最大值和当前子列表作为输入,它返回两者之间的最大值。
答案 1 :(得分:3)
这应该有效
List.fold_left (fun current_max l -> max current_max (List.length l)) 0 [[1;2]; [1;2;3]; []]
上试用
答案 2 :(得分:2)
即使使用fold_left
的其他解决方案有效,这里也是一个“手动编码”的解决方案:
let longestsublist l =
(let rec aux l current_max = match l with
| [] -> current_max
| x::xs -> aux xs (max (List.length x) current_max)
in aux l (-1))