如何在不使用内置函数的情况下将两个 Scala 列表合并到另一个列表中

How to merge two scala list in to another list without using built in functions

val l1 = List(1,2)
val l2 = List(3,4)

我知道 List.concat(l1,l2) 会合并这两个列表并创建一个新列表。但是有没有什么办法可以不使用内置方法来实现呢

我尝试了下面的代码但没有帮助

for(i <- l1; j <- l2){
  List.add(i,j)
}

我想要结果为 List(1,2,3,4) 但我不想使用 concat 或 :::: 或 ++

请帮忙

你可以从这几个选项中选择,我不知道 List.concat(l1,l2) 是否符合你的需要,但我添加了如果它适合的话:

  val l1 = List(1, 2)
  val l2 = List(3, 4, 5)
  
  def merge(l1: List[Int], l2: List[Int]): List[Int] = {
    @tailrec
    def loop(l1: Vector[Int], l2: List[Int]): List[Int] = {
      l1.lastOption match {
        case Some(x) => loop(l1.dropRight(1), x +: l2)
        case None => l2
      }
    }

    loop(l1.toVector, l2)
  }

  println(merge(l1, l2))

此示例仅使用 foldLeft 函数将第二个 List 连接到第一个:

  val l1 = List(1, 2)
  val l2 = List(3, 4, 5)

  val concatenatedList: List[Int] = l1.toVector.foldRight(l2)((el, result) => el +: result)
  println(concatenatedList)

此外,如注释中所写,不要在列表中使用:+,因为添加到列表末尾需要O(n) 时间,但如果使用+: 则需要常数时间。