我正在努力学习scala。今天我试图编写一个简单的递归方法来展平嵌套列表。我知道我可以调用一个扁平功能,但我试图从头开始。
我遇到类型不匹配错误,我试图了解原因。什么类型的变量是' A'。
def flatten[A](lst:List[List[A]):List[A] = lst match{
case Nil=> Nil
case (h:List[A])::tail=> flatten(h)::flatten(tail)
case h :: tail=> flatten(tail)
}
答案 0 :(得分:2)
flatten(h)
是一个编译错误,因为h
是List[A]
但flatten
期待嵌套List[List[A]]
。尝试简单地将h
与展平tail
:
def flatten[A](lst: List[List[A]]): List[A] = lst match {
case Nil => Nil
case h :: tail => h ::: flatten(tail)
}
示例:
scala> flatten(List(List("a", "b"), List("c", "d")))
res0: List[String] = List(a, b, c, d)
scala> flatten(List(List(1, 2), List(3, 4)))
res1: List[Int] = List(1, 2, 3, 4)