如何在不使用内置函数的情况下将两个 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) 时间,但如果使用+: 则需要常数时间。
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) 时间,但如果使用+: 则需要常数时间。