我在Scala(实际上长度为500)中有此列表:
List((1,List(1,2,3)),(2,(3,3)))
我该怎么做,以便我可以创建一个包含以下内容的新列表:
List((1,1),(1,2),3),3))
基本上,我想要一个新的元组列表,其中将包含旧元组的第一个元素以及该元组内的每个列表元素。我不确定如何开始执行此操作,这就是为什么我未发布任何代码来显示我的尝试的原因。我真的很抱歉,但是我无法把握这一点。感谢您能提供的任何帮助。
我在Scala(实际上长度为500)中有此列表:
List((1,List(1,2,3)),(2,(3,3)))
我该怎么做,以便我可以创建一个包含以下内容的新列表:
List((1,1),(1,2),3),3))
基本上,我想要一个新的元组列表,其中将包含旧元组的第一个元素以及该元组内的每个列表元素。我不确定如何开始执行此操作,这就是为什么我未发布任何代码来显示我的尝试的原因。我真的很抱歉,但是我无法把握这一点。感谢您能提供的任何帮助。
与@Andriy完全相同,但使用的是for comprehension。 最后到底是same,但是恕我直言。
val result = for {
(x,ys) <- xs
y <- ys
} yield (x,y) // You can also use x -> y
(同样,我建议您遵循任何教程,这是一个基本练习,如果您了解map
和flatMap
的工作原理,那么应该没问题)
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
链。