我试图转换如下所示的数据:
val inputData =
Seq(("STUDY1", "Follow-up", 1),
("STUDY1", "Off Study", 2),
("STUDY1", "Screening", 3),
("STUDY1", "Treatment", 4),
("STUDY2", "Follow-up", 5),
("STUDY2", "Off Study", 6),
("STUDY2", "Screening", 7),
("STUDY2", "Treatment", 8));转换成这样的数据:
val desiredData =
Seq(Seq(1,2,3,4),
Seq(5,6,7,8));我得到的最接近的是这个:
val result: Map[String, Seq[Int]] =
data.groupBy(i => i._1)
.mapValues(j => j.map(k => k._3))
.mapValues(_.toArray)
result.values.toSeq这产生了:
res0: Seq[Seq[Int]] = Stream(WrappedArray(1, 2, 3, 4), ?)最后一个问号是让我做循环。
编辑未来的网络旅行者谁登陆这里:我的代码实际上是工作..。我的困惑源于我对?的理解。下面的人的回答帮助我认识到,mapValues进行了懒惰的评估,而?只是暗示了这一点。
发布于 2016-01-26 03:29:13
mapValues on Map是懒惰的(与默认Map上的任何其他方法不同)。所以这可能就是问题所在。你试过:
data.groupBy(_._1).map(_._2.map(_._3).toArray)请注意,toArray在这里是完全可选的。
发布于 2016-01-26 03:47:44
val result: List[Seq[Int]] =
data.groupBy(_._1).mapValues(_.map(_._3)).values.toListhttps://stackoverflow.com/questions/35006568
复制相似问题