我在处理这个 Scala 集合时做错了啥?

Posted

技术标签:

【中文标题】我在处理这个 Scala 集合时做错了啥?【英文标题】:What am I doing wrong in handling this Scala collection?我在处理这个 Scala 集合时做错了什么? 【发布时间】:2015-04-11 00:28:25 【问题描述】:

给定一个 List[CaseClass] 我想按两个类属性对元素进行分组并获得嵌套的 Maps

case class CaseClass(
   a   String,
   b   String,
   c   String
)

val collection: List[CaseClass] = List(
   CaseClass("a1","b1","c1"),
   CaseClass("a1","b1","c2"),
   CaseClass("a1","b2","c3"),
   CaseClass("a2","b2","c4"),
   CaseClass("a2","b2","c5"),
)
val res = collection.groupBy(_.a).map case (k,v) => v.groupBy(_.b)

我得到的是按“b”属性分组的 Map[String, CaseClass] 对象。但我想得到按“a”(外部地图)和“b”(内部地图)分组的 Map[String, Map[String, CaseClass]],如下所示:

Map("a1" -> 
         Map("b1" -> List( CaseClass("a1","b1","c1"),
                           CaseClass("a1","b1","c2"))), 
         Map("b2" -> List( CaseClass("a1","b2","c3"))), 
    "a2" -> 
         Map("b2" -> List( CaseClass("a2","b2","c4"),
                           CaseClass("a2","b2","c5"))))

我应该如何更改我的代码?

【问题讨论】:

【参考方案1】:

问题是(k,v) => v.groupBy(_.b) 需要将(key, value) 映射到(key, value),但这是将(key, value) 映射到value。钥匙被丢弃了。

所以你只需要保留密钥:

val res = collection.groupBy(_.a).map case (k,v) => (k, v.groupBy(_.b)) 

【讨论】:

哎哟!!就是这么简单!谢谢

以上是关于我在处理这个 Scala 集合时做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有批处理的选择命令我做错了啥?

我在这个 PLSQL 函数中做错了啥?

我在这个数组和 foreach 上做错了啥?

进行多处理时“TypeError:'type' object is not subscriptable”。我究竟做错了啥?

Firestore - 我做错了啥?

mysql变量有问题,我在这里做错了啥?