如何拆分元组scala列表

我在Scala(实际上长度为500)中有此列表:

List((1,List(1,2,3)),(2,(3,3)))

我该怎么做,以便我可以创建一个包含以下内容的新列表:

List((1,1),(1,2),3),3))

基本上,我想要一个新的元组列表,其中将包含旧元组的第一个元素以及该元组内的每个列表元素。我不确定如何开始执行此操作,这就是为什么我未发布任何代码来显示我的尝试的原因。我真的很抱歉,但是我无法把握这一点。感谢您能提供的任何帮助。

shanchuang2006 回答:如何拆分元组scala列表

与@Andriy完全相同,但使用的是for comprehension。 最后到底是same,但是恕我直言。

val result = for {
  (x,ys) <- xs
  y <- ys
} yield (x,y) // You can also use x -> y

(同样,我建议您遵循任何教程,这是一个基本练习,如果您了解mapflatMap的工作原理,那么应该没问题)

,
scala> val xs = List((1,List(1,2,3)),(2,(3,3)))
xs: List[(Int,List[Int])] = List((1,3)))

scala> xs.flatMap { case (x,ys) => ys.map(y => (x,y)) }
res0: List[(Int,Int)] = List((1,1),(1,2),3),3))
,

值得一提的是,Andriy Plokhotnyuk的解决方案也可以重写为一种理解:

val list = List((1,3)))

val pairs = for {
  (n,nestedList) <- list
  m <- nestedList
} yield (n,m)

assert(pairs == List((1,3)))

如另一个答案中所述,编译器将有效地将理解力重新写入flatMap / map链。

本文链接:https://www.f2er.com/2934645.html

大家都在问