我有以下单元测试:
FlattenArray.flatten(
List(0, 2, List(List(2, 3), 8, List(List(100)), null, List(List(null))), -2))
should be(List(0, 2, 2, 3, 8, 100, -2))
我的实施如下:
object FlattenArray {
def flatten(list: List[Any]): List[Any] = {
list match {
case Nil => Nil
case (x: List[Any]) :: tail => flatten(x) ::: flatten(tail)
case x :: tail => x :: flatten(tail)
}
}
}
测试是否失败,因为,如果没有,我应该不在展平列表中添加任何值:任何有关如何操作的建议?
我可以从展平列表中过滤掉空值:这是正确的实现吗?
答案 0 :(得分:5)
您可以为null :: tail
添加一个返回flatten(tail)
的特殊情况:
def flatten(list: List[Any]): List[Any] = {
list match {
case Nil => Nil
case null :: tail => flatten(tail)
case (x: List[Any]) :: tail => flatten(x) ::: flatten(tail)
case x :: tail => x :: flatten(tail)
}
}