如何在Scala中定义递归列表类型?

时间:2015-08-19 13:30:55

标签: scala recursion types

我想创建一个List(1, List(2, 3))函数,它将获取各种深度列表并将其转换为平面列表。

例如,对于整数,可以List(1, 2, 3)并返回def flatten(list: List[???]): List[T]

如何正确声明此功能?

Page_Unload

1 个答案:

答案 0 :(得分:2)

您似乎必须使用Any,因为列表的深度未知。

def flatten(input: List[Any]): List[Any] =
    input match {
      case Nil => Nil
      case head :: tail =>
        head match {
          case list: List[_] => flatten(list) ::: flatten(tail)
          case elem => elem :: flatten(tail)
        }
    }

scala> flatten(List(1, List(2, 3)))
res0: List[Any] = List(1, 2, 3)

如果您想查看几个实施选项,请选中here,并且测试为here