繁体   English   中英

如何在scala中对列表项进行分组

[英]how to group items of a list in scala

val x1 = List(
                        c1(1, ("UTC",List(c2("2014 - 11 - 23", 0.8747f)))),
                        c1(2, ("UTC", List(c2("2014 - 11 - 23", 0.0f)))),
                        c1(1, ("EST", List(c2("2014 - 09 - 01", 0.432f)))),
                        c1(3, ("EST", List(c2("2014 - 09 - 01", 4.1043f))))
                    )

现在我希望我的列表按ID进行分组,如下所示:

val x2 = List(
c1(1, ("UTC", List(c2("2014 - 11 - 23", 0.8747f)), ("EST", List(c2("2014 - 09 - 01", 0.432f)))),
c1(2, ("UTC", List(c2("2014 - 11 - 23", 0.0f)))),    
c1(3, ("EST", List(c2("2014 - 09 - 01", 4.1043f)))))
)

因此,所有ID = 1的列表都被分组为一个列表。

PS c1和c2是用于保存数据的案例类。

除非我弄错了,否则您正在寻找List.groupBy

x1.groupBy(_.id)

我想这就是您要寻找的。

case class c1(id:Int, list:List[String])
object Tester extends App{

  val x = List(c1(1, List("a","b")), c1(2, List("x","y")), c1(1,List("t","w")), c1(4, List("g","j")))
  val y = x.groupBy(_.id)
  println(y)
}

可能是这样的:

  case class c1(id: Int, data: (String, List[c2])*)
  case class c2(d: String, v: Float)

  val x2 = x1.groupBy(_.id).map(g => c1(g._1, g._2.flatMap(y => y.data): _*))
  println(x2)

  //  List(
  //      c1(2,List((UTC,List(c2(2014 - 11 - 23,0.0))))), 
  //      c1(1,List((UTC,List(c2(2014 - 11 - 23,0.8747))), 
  //                (EST,List(c2(2014 - 09 - 01,0.432))))), 
  //      c1(3,List((EST,List(c2(2014 - 09 - 01,4.1043))))))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM