gpt4 book ai didi

list - 在Scala中将元素从一个列表复制到另一个列表

转载 作者:行者123 更新时间:2023-12-03 18:26:39 25 4
gpt4 key购买 nike

我想在 Scala 中创建通用(不变)方法,它将元素从源列表复制到目标列表。在 Java 中有 复制 中的方法java.util.Collections (见 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#copy%28java.util.List,%20java.util.List%29)。我知道 Scala List 是不可变对象(immutable对象),所以我想创建并返回新列表。

我编写了以下代码:

def copy[T](dest:List[T], src:List[T]):List[T] = {
if(dest.length<src.length) throw new Exception("IndexOutOfBoundsException")
else if(src==Nil) dest
else {
var ret = dest
ret = dest.updated(0, src.first)
var i=1
val f:(T=>Unit) = a => {
if(i<src.length) ret=ret.updated(i, src(i))
i+=1
()
}
dest.foreach(f)
ret
}
}

但我认为它可以写得更好。你能帮我写出更好的代码吗?提前致谢。

已编辑 : 也许我表达不清楚我想做什么。我有两个列表(scala.collection.immutable.List),例如 (长度=x) 和 目的地 (长度=y>=x)。我想先替换 x 的元素目的地 包含来自 的元素的列表源 列表。

最佳答案

你是说scala.collection.immutable.List ?它是不可变的。无需复制它们。不可变意味着没有什么可以改变它,所以你可以在不同的线程中使用它。

在 Scala 中创建集合的通用方法是 builder。您可以从 CanBuildFrom 获得一个目的。或者,您可以从 genericBuilder 获取它。收集实例的方法。

scala> val list = List(1, 2, 3)
list: List[Int] = List(1, 2, 3)

scala> val b = list.genericBuilder[Int]
b: scala.collection.mutable.Builder[Int,List[Int]] = ListBuffer()

scala> list.foreach{ b += _ }

scala> val result = b.result // this code is useless. `val result = list` is enough
result: List[Int] = List(1, 2, 3)

如果要在现有集合的基础上创建不同类型的新集合,可以使用 collection.breakOut 像这样的方法:
scala> val list = List('a', 'b', 'c')
list: List[Char] = List(a, b, c)

scala> val result: String = list.map{identity}(collection.breakOut)
result: String = abc

更新
require(src.length <= dest.length, "IndexOutOfBoundsException")
src ++ dest.drop(src.length)

关于list - 在Scala中将元素从一个列表复制到另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13800914/

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