現在我要計算列表中最常見的項目。
我一步一步做到了。計算列表的模式
- 排序列表
- 組列表
- 怎麼算每個數字
- 我不知道如何繼續多次......請幫助。這是我做 代碼現在
group :: Eq a => [a] -> [[a]]
group = groupBy (==)
-- | The 'groupBy' function is the non-overloaded version of 'group'.
groupBy :: (a -> a -> Bool) -> [a] -> [[a]]
groupBy _ [] = []
groupBy eq (x:xs) = (x:ys) : groupBy eq zs
where (ys,zs) = span (eq x) xs
task4 xs = (map (\[email protected](x:xs) -> (x,length l)) (group (sortList xs)))
<main> task4 [1,1,1,2,2,3]
[(1,3),(2,2),(3,1)]
你知道這不是一個有效的方法嗎?快速方法是保持值到計數器的映射。對於每個值,然後查找並遞增每個計數器值。粗糙的,這需要一個Hashable,Ord或其他一些輔助約束。 –
@ ThomasM.DuBuisson效率不高?它是O(n log n)時間(排序步驟;之後的所有內容都是線性時間)。 – delnan
你認爲這種行爲是不是? –