如何在 Kotlin 中复制列表?
我正在使用
val selectedSeries = mutableListOf<String>()
selectedSeries.addAll(series)
有没有更简单的方法?
我会使用toCollection()
扩展方法:
val original = listOf("A", "B", "C")
val copy = original.toCollection(mutableListOf())
MutableList
,然后将原始列表中的每个元素添加到新创建的列表中。MutableList<String>
。如果您不想公开这个新列表的可变性,则可以将其类型声明为不可变列表。val copy: List<String> = original.toCollection(mutableListOf())
在我看来,使用 Kotlin 的新版本(1.6+)中的集合构建器是最好的、最符合惯用方式的方法。
val shallowListCopy = buildList { addAll(list) }
listOf(instances).map{ it.copy() }
- undefinedCollection
,调用.copy()
方法可能不会对该集合进行深拷贝
。我还没有验证过。 - undefined在尝试浅复制、深复制克隆和许多其他方法后,我发现这个解决方案肯定适合您。
val iterator: Iterator<Object> = yourList.iterator()
while (iterator.hasNext())
newList.add(iterator.next().copy())
对于简单的列表,有很多正确的解决方案。
然而,这只适用于浅层列表。
下面的函数适用于任何二维ArrayList
。实际上,ArrayList
等同于MutableList
。有趣的是,当使用显式的MutableList
类型时,它不起作用。如果需要更多维度,则需要编写更多的函数。
fun <T>cloneMatrix(v:ArrayList<ArrayList<T>>):ArrayList<ArrayList<T>>{
var MatrResult = ArrayList<ArrayList<T>>()
for (i in v.indices) MatrResult.add(v[i].clone() as ArrayList<T>)
return MatrResult
}
整数矩阵演示:
var mat = arrayListOf(arrayListOf<Int>(1,2),arrayListOf<Int>(3,12))
var mat2 = ArrayList<ArrayList<Int>>()
mat2 = cloneMatrix<Int>(mat)
mat2[1][1]=5
println(mat[1][1])
它显示12
尝试以下代码来复制 Kotlin 中的列表
arrayList2.addAll(arrayList1.filterNotNull())