【发布时间】:2021-09-08 22:51:39
【问题描述】:
我对有关此功能的文档/提供的使用示例感到有些困惑。 flatten 只能发生一次吗?喜欢
List(List(1, 2), List(3, List(4, 5, 6))) -> List(1, 2, 3, List(4, 5, 6))
或者您以某种方式指定展平的深度,使其变为List(1, 2, 3, 4, 5, 6)?
因为,例如,在 JS 中,函数似乎可以flat() 进入一维数组的任何深度。 Scala flatten 可以做到这一点还是只能提升一次?
我正在尝试自己重新创建该功能,并希望模仿所需的行为并了解其工作方式可能不同的原因。
【问题讨论】:
-
List#flatten只会展平 1 个级别。您可能可以自己尝试;)如果您想深度扁平化,您可能必须构建一个递归方法。 -
请注意,您的
List(List(1, 2), List(3, List(4, 5, 6)))是可疑的,因为它可能被定义为List[Any],这在 Scala 中是一种耻辱。 -
@GaëlJ,由于无法定义函数的类型,因此即使是递归方法也不起作用,您可以尝试一下。您可以通过类检查和不安全的访问来做一些非常讨厌的事情,但这并不值得,当您需要动态深度展平时,这意味着您在其他地方遇到了设计问题。
-
像这样的嵌套列表,其中嵌套级别可能会有所不同,是树形的。它们基本上是树,而不是列表。使用实际的树类型而不是使用
List。
标签: scala scala-collections iterable flatten