fer*_*k86 3 scala scala-collections
我正在优化递归函数.最后,结果将是acc.reverse ::: b.这是O(n)因为reverse和:::.是否有更好的表现方式来组合这两个列表?谢谢.
防爆.结合List(3, 2, 1)并 List(4, 5, 6)以List(1, 2, 3, 4, 5, 6)
标准库包括以下reverse_:::方法:
scala> List(3, 2, 1) reverse_::: List(4, 5, 6)
res0: List[Int] = List(1, 2, 3, 4, 5, 6)
Run Code Online (Sandbox Code Playgroud)
这仍然是O(n),但避免单独调用:::.
只是为了有趣和学习,您可以轻松地将其实现为尾递归函数:
@tailrec
def reverseConcat[A](lefts: List[A], rights: List[A]): List[A] =
lefts match {
case Nil => rights
case head::tail => reverseConcat(tail, head::rights)
}
Run Code Online (Sandbox Code Playgroud)
或使用foldLeft:
def reverseConcat[A](lefts: List[A], rights: List[A]): List[A] =
lefts.foldLeft(rights)((xs, x) => x :: xs)
Run Code Online (Sandbox Code Playgroud)
注意,reverse_:::没有使用尾递归实现; 它使用var幕后,所以可能会有不同的表现.
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |