所以我有一个字符串列表,任务是计算该列表中每个字符串可以满足的次数。 我用地图:
freqMap = M.fromListWith (+) [(c, 1) | c <- subs]
只是排序:
frequency list = map (\l -> (length l, head l)) $ group (sort list)
但这对我的任务来说太慢了 - 原始列表非常大。 我听说过,使用未装箱的阵列非常快。就像整数列表一样:
histogram bounds xs = accumArray (+) 0 bounds [(x, 1) | x <- xs]
由于String不是Ix类的成员,问题是:是否可以从字符串列表构建数组?
答案 0 :(得分:1)
Data.HashMap
(lazy / strict)是vanilla haskell地图的更快版本 - 如果瓶颈主要是更新/查找速度,使用它们可以加快操作速度。
最好的部分是你可以保持已经编写过的干净利落的方法,而不必编写与数组交互的代码(通常是丑陋的)。