如何从Map的值集中识别最大长度?

时间:2016-02-16 14:44:41

标签: f#

如何从地图的数值集中识别最大长度?

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)));

1 个答案:

答案 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(附带结果的附图),这样做只需要遍历(已排序)列表一次......也许你可以试着自己做^^