gpt4 book ai didi

scala - 如何创建可以从任意深度嵌套的列表中制作平面列表的函数?

转载 作者:行者123 更新时间:2023-12-04 13:56:25 25 4
gpt4 key购买 nike

是否可以在 Scala 中编写函数来获取任意深度嵌套列表的列表并将其递归转换为平面列表?例如:

flatten(List(List(1), List(List(2), 3), 4))
应该回来
List(1,2,3,4)
我用 shapeless 做了一些尝试但没有效果:
object flatten extends (List ~> List) {
def apply[T](s: List[T]) = s.map {
case l: List[T] => apply(s)
case x => x
}
}
这给了我:

type mismatch

found: List[Any]

required: List[T]


如果它可以扣除正确的类型也会很棒(例如 List[Int] 而不是 List[Any] )

最佳答案

问题是,您没有收到 List[T]在输入中,但是一个 List[Any]哪里AnyT 的混合体和 List[Any] .

因此,如果您知道叶元素的类型,则可能会使用类型参数 T通过在 T 上递归模式匹配来表示它和 flatmap 元素或 List[Any] :

import scala.reflect.ClassTag

def flatten[T: ClassTag](list: List[Any]): List[T] =
list.flatMap {
case x: T => List(x)
case sub: List[Any] => flatten[T](sub)
}

flatten[Int](List(List(1), List(List(2), 3), 4))
// List[Int] = List(1, 2, 3, 4)

关于scala - 如何创建可以从任意深度嵌套的列表中制作平面列表的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55892104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com