我参与了“Scala 中的函数式编程原理”中的“打包函数”练习。
将连续的重复项放入
List[List[T]]
.
例子
input: List("a", "a", "b", "b", "c", "a")
output: List(List(a, a), List(b, b), List(c), List(a))
鉴于此功能...
def pack[T](xs: List[T]): List[List[T]] = {
def go[T](ys: List[T], acc: List[List[T]]) : List[List[T]] = ys match {
case Nil => acc
case x :: xs_ => val r: List[T] = ys.takeWhile(a => a == x)
go(ys.drop(r.length), acc :+ r)
}
go(xs, List(Nil).filter(_ != Nil)) // *** line in question ***
}
有没有更好的方法来传递List[List[T]]
内部列表为空的地方?
如果我没有filter
那里,pack(...)
结果的头将是List()
.