首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于列表的Scala groupBy

用于列表的Scala groupBy
EN

Stack Overflow用户
提问于 2017-11-16 18:33:38
回答 2查看 21.6K关注 0票数 14

我想创建一个映射,它的键是字符串,值是字符串在列表中出现的次数。我尝试了groupBy方法,但没有成功。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-16 18:45:39

必填答案

代码语言:javascript
运行
复制
scala> val l = List("abc","abc","cbe","cab")
l: List[String] = List(abc, abc, cbe, cab)

scala> l.groupBy(identity).mapValues(_.size) 
res91: scala.collection.immutable.Map[String,Int] = Map(cab -> 1, abc -> 2, cbe -> 1)
票数 22
EN

Stack Overflow用户

发布于 2017-11-17 12:54:50

假设您有一个列表,如

代码语言:javascript
运行
复制
scala> val list = List("abc", "abc", "bc", "b", "abc")
list: List[String] = List(abc, abc, bc, b, abc)

你可以写一个函数

代码语言:javascript
运行
复制
scala> def generateMap(list: List[String], map:Map[String, Int]) : Map[String, Int] = list match {
     |       case x :: y => if(map.keySet.contains(x)) generateMap(y, map ++ Map(x -> (map(x)+1))) else generateMap(y, map ++ Map(x -> 1))
     |       case Nil => map
     |     }
generateMap: (list: List[String], map: Map[String,Int])Map[String,Int]

然后调用函数,如下所示

代码语言:javascript
运行
复制
scala> generateMap(list, Map.empty)
res1: Map[String,Int] = Map(abc -> 3, bc -> 1, b -> 1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47327360

复制
相关文章

相似问题

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