首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Map[String,Seq[Int]]转换为Seq[Seq[Int]]

将Map[String,Seq[Int]]转换为Seq[Seq[Int]]
EN

Stack Overflow用户
提问于 2016-01-26 03:23:59
回答 2查看 1.1K关注 0票数 2

我试图转换如下所示的数据:

代码语言:javascript
复制
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));

转换成这样的数据:

代码语言:javascript
复制
val desiredData =
  Seq(Seq(1,2,3,4),
    Seq(5,6,7,8));

我得到的最接近的是这个:

代码语言:javascript
复制
val result: Map[String, Seq[Int]] =
  data.groupBy(i => i._1)
    .mapValues(j => j.map(k => k._3))
    .mapValues(_.toArray)

result.values.toSeq

这产生了:

代码语言:javascript
复制
res0: Seq[Seq[Int]] = Stream(WrappedArray(1, 2, 3, 4), ?)

最后一个问号是让我做循环。

编辑未来的网络旅行者谁登陆这里:我的代码实际上是工作..。我的困惑源于我对?的理解。下面的人的回答帮助我认识到,mapValues进行了懒惰的评估,而?只是暗示了这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-26 03:29:13

mapValues on Map是懒惰的(与默认Map上的任何其他方法不同)。所以这可能就是问题所在。你试过:

代码语言:javascript
复制
data.groupBy(_._1).map(_._2.map(_._3).toArray)

请注意,toArray在这里是完全可选的。

票数 5
EN

Stack Overflow用户

发布于 2016-01-26 03:47:44

代码语言:javascript
复制
val result: List[Seq[Int]] =
  data.groupBy(_._1).mapValues(_.map(_._3)).values.toList
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35006568

复制
相关文章

相似问题

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