首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >计算元素的出现次数

计算元素的出现次数
EN

Stack Overflow用户
提问于 2012-06-07 22:58:55
回答 4查看 15.2K关注 0票数 22

对列表中的所有元素进行计数在Haskell中是一行程序:

代码语言:javascript
复制
count xs = toList (fromListWith (+) [(x, 1) | x <- xs])

下面是一个用法示例:

代码语言:javascript
复制
*Main> count "haskell scala"
[(' ',1),('a',3),('c',1),('e',1),('h',1),('k',1),('l',3),('s',2)]

这个函数在Scala中也能如此优雅地表达吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-07 23:04:49

代码语言:javascript
复制
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))
票数 40
EN

Stack Overflow用户

发布于 2012-06-07 23:10:54

从Data.List库中调用group

代码语言:javascript
复制
group :: [a] -> [[a]]

带给我们:

代码语言:javascript
复制
map (head &&& length) . group . sort

一个列表友好且相对“幼稚”的实现。

票数 6
EN

Stack Overflow用户

发布于 2013-04-30 20:31:22

另一种实现方式:

代码语言:javascript
复制
def count[A](xs: Seq[A]): Seq[(A, Int)] = xs.distinct.map(x => (x, xs.count(_ == x)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10934383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档