gpt4 book ai didi

scala - 比 acc.reverse:::b 更高效?

转载 作者:行者123 更新时间:2023-12-04 20:51:22 26 4
gpt4 key购买 nike

我正在对递归函数进行尾部优化。最后,结果将是 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)

这仍然是 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)
}

或者使用foldLeft:

def reverseConcat[A](lefts: List[A], rights: List[A]): List[A] =
lefts.foldLeft(rights)((xs, x) => x :: xs)

请注意,reverse_::: 不是使用尾递归实现的;它在幕后使用了一个 var,因此可能会有不同的表现。

关于scala - 比 acc.reverse:::b 更高效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14739653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com