现在我要计算列表中最常见的项目。
我一步一步做到了。计算列表的模式
- 排序列表
- 组列表
- 怎么算每个数字
- 我不知道如何继续多次......请帮助。这是我做 代码现在
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
你认为这种行为是不是? –