scala中的“unlist”(例如展平一系列序列的序列......)
Posted
技术标签:
【中文标题】scala中的“unlist”(例如展平一系列序列的序列......)【英文标题】:"unlist" in scala (e.g flattening a sequence of sequences of sequences...) 【发布时间】:2015-04-20 22:53:35 【问题描述】:Scala 中是否有一种简单的方法可以将嵌套的序列序列(等)序列展平或“取消列出”为这些事物的简单序列,而无需任何嵌套结构?
【问题讨论】:
Generic, type-safe way to flatten arbitrarily nested collections in Scala? 的可能重复项 另请参阅我的一些相关答案中关于深度反向here 的讨论。 我想到的最简单的方法是循环运行提供的 flatten 函数,直到它的输出等于它的输入。我认为大多数集合都有 flatten 功能,但我只检查了 List、Seq 和 Array。 【参考方案1】:我不认为有一种 flatten` 方法可以将深度嵌套转换为序列。
编写一个简单的递归函数很容易做到这一点
def flatten(ls: List[Any]): List[Any] = ls flatMap
case ms: List[_] => flatten(ms)
case e => List(e)
val a = List(List(List(1, 2, 3, 4, 5)),List(List(1, 2, 3, 4, 5)))
flatten(a)
//> res0: List[Any] = List(1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
【讨论】:
这在紧要关头很有效,但这里提供的解决方案:***.com/questions/12160596/… 是类型安全的 抱歉这个问题,但你不应该写+Any
吗?
@BenReich - OP 想要一种简单的方法,并且您的链接中给出的解决方案对于一个简单的案例来说过于复杂(即,如果它只是列表等的嵌套)
@DmitryGinzburg - 它甚至不能用 +Any 编译 :) 对不起,但我不知道你在做什么
@mohit 我同意——我只是想说有一个可用的类型安全选项,所以如果这是一个常见问题,那么该选项更可取!以上是关于scala中的“unlist”(例如展平一系列序列的序列......)的主要内容,如果未能解决你的问题,请参考以下文章