我有Data.Map,看起來像這樣:排序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
我轉換地圖列出,對它們進行排序,得到第一值最大和篩選器列表。
我只是想知道是否有更優化和美麗的解決方案這項任務?
謝謝。
如果沒有理由進行快速查找,則可能需要考慮使用堆而不是地圖。有了堆,最大的元素總是最頂層的元素,因此很容易訪問。 – kqr