我想编写一个将列表展平的函数。
object Flat {
def flatten[T](list: List[T]): List[T] = list match {
case Nil => Nil
case head :: Nil => List(head)
case head :: tail => (head match {
case l: List[T] => flatten(l)
case i => List(i)
}) ::: flatten(tail)
}
}
object Main {
def main(args: Array[String]) = {
println(Flat.flatten(List(List(1, 1), 2, List(3, List(5, 8)))))
}
}
我不知道它为什么不工作,它返回List(1, 1, 2, List(3, List(5, 8)))
,但它应该是List(1, 1, 2, 3, 5, 8)
。
你能给我一个提示吗?
5条答案
按热度按时间dldeef671#
您不需要嵌套您的匹配语句。取而代之的是按如下方式进行匹配:
1wnzp6jl2#
我的,相当于SDJ McHattie的解决方案。
ccgok5k53#
删去第4行
你会得到正确的答案。
考虑一下测试用例
对于第4行,不会处理列表中的最后一个元素
bwntbbo34#
mrphzbgm5#
如果有人不理解接受的解决方案的这一行,或者不知道您可以用类型注解模式:
然后查看不带类型注解的等价物:
所以,为了更好地理解一些替代方案:
顺便说一句,第二个发布的答案将执行以下操作,这可能不是您想要的。