我的 Data.Map 看起来像这样:
fromList [("eso",1),("mes",1),("ome",2),("som",2)]
我需要从此映射中获取值最大的键列表:
["ome","som"]
这是我的解决方案:
get_max_from_map m = map fst (filter is_biggest sorted)
where sorted = List.sortBy (\(k1, v1) (k2, v2) -> v2 `compare` v1) $ Map.toList m
max_v = snd $ head sorted
is_biggest (key, value) = value == max_v
我将地图转换为列表,对它们进行排序,将第一个值作为最大值并过滤列表。
我只是想知道这个任务是否有更优化和更漂亮的解决方案?
谢谢。