如何从地图的数值集中识别最大长度?
let numbers = [1;2;2;3;3;3;4;5;5]
let map = numbers |> Seq.groupBy id
|> Map.ofSeq
我想这样做:
map.Values |> List.max
或...
let longestSequence = Map.map (fun (k, v) -> List.max(List.ofSeq(v)));
答案 0 :(得分:3)
您可以使用Dictionary.Values
获得与Map.toSeq >> Seq.map snd
类似的内容,这样您就可以在map
中收集最大的收集序列:
> map |> Map.toSeq |> Seq.map snd |> Seq.maxBy Seq.length;;
val it : seq<int> = seq [3; 3; 3]
当然,当您的列表已经处于已排序的阶段时,绕过Map
绕行似乎很奇怪
> numbers |> Seq.groupBy id |> Seq.map snd |> Seq.maxBy Seq.length;;
val it : seq<int> = seq [3; 3; 3]
会做同样的事情;)
如果您在这里考虑问题,也可以写一个List.fold
(附带结果的附图),这样做只需要遍历(已排序)列表一次......也许你可以试着自己做^^