对列表中的所有元素进行计数在Haskell中是一行程序:
count xs = toList (fromListWith (+) [(x, 1) | x <- xs])
下面是一个用法示例:
*Main> count "haskell scala"
[(' ',1),('a',3),('c',1),('e',1),('h',1),('k',1),('l',3),('s',2)]
这个函数在Scala中也能如此优雅地表达吗?
发布于 2012-06-07 23:04:49
scala> "haskell scala".groupBy(identity).mapValues(_.size).toSeq
res1: Seq[(Char, Int)] = ArrayBuffer((e,1), (s,2), (a,3), ( ,1), (l,3), (c,1), (h,1), (k,1))
发布于 2012-06-07 23:10:54
从Data.List库中调用group
,
group :: [a] -> [[a]]
带给我们:
map (head &&& length) . group . sort
一个列表友好且相对“幼稚”的实现。
发布于 2013-04-30 20:31:22
另一种实现方式:
def count[A](xs: Seq[A]): Seq[(A, Int)] = xs.distinct.map(x => (x, xs.count(_ == x)))
https://stackoverflow.com/questions/10934383
复制相似问题