使用分组减少/折叠scala序列
在scala中,给定一对Iterable,例如使用分组减少/折叠scala序列,scala,Scala,在scala中,给定一对Iterable,例如Iterable[(String,Int]), 是否有方法根据\u 1累积或折叠\u 2s?如下图所示,将A后面的所有#相加,并将B后面的#分开 我可以通过groupBy分两步完成这项工作 val mapBy1 = list.groupBy( _._1 ) for ((key,sublist) <- mapBy1) yield (key, sublist.foldLeft(0) (_+_._2)) val-mappy1=list.groupB
Iterable[(String,Int])
,
是否有方法根据\u 1
累积或折叠\u 2
s?如下图所示,将A后面的所有#相加,并将B后面的#分开
我可以通过groupBy分两步完成这项工作
val mapBy1 = list.groupBy( _._1 )
for ((key,sublist) <- mapBy1) yield (key, sublist.foldLeft(0) (_+_._2))
val-mappy1=list.groupBy(u._1)
对于((键,子列表)您可以执行以下操作:
list.foldLeft(Map[String, Int]()) {
case (map, (k,v)) => map + (k -> (map.getOrElse(k, 0) + v))
}
你可以这样做:
list.foldLeft(Map[String, Int]()) {
case (map, (k,v)) => map + (k -> (map.getOrElse(k, 0) + v))
}
您可以边走边构建映射
,并在事后将其转换回列表
listOfPairs.foldLeft(Map[String,Int]().withDefaultValue(0)){
case (m,(k,v)) => m + (k -> (v + m(k)))
}.toList
您可以边走边构建映射
,并在事后将其转换回列表
listOfPairs.foldLeft(Map[String,Int]().withDefaultValue(0)){
case (m,(k,v)) => m + (k -> (v + m(k)))
}.toList
您还可以将groupBy
与mapValues
一起使用:
list.groupBy(_._1).mapValues(_.map(_._2).sum).toList
res1: List[(String, Int)] = List((A,5), (B,1))
您还可以将groupBy
与mapValues
一起使用:
list.groupBy(_._1).mapValues(_.map(_._2).sum).toList
res1: List[(String, Int)] = List((A,5), (B,1))