如何在Kotlin复制列表?
我使用
val selectedSeries = mutableListOf<String>()
selectedSeries.addAll(series)
有没有更简单的方法?
如何在Kotlin复制列表?
我使用
val selectedSeries = mutableListOf<String>()
selectedSeries.addAll(series)
有没有更简单的方法?
当前回答
在尝试浅拷贝,深拷贝克隆和更多的我发现这个解决方案肯定会为你工作。
val iterator: Iterator<Object> = yourList.iterator()
while (iterator.hasNext())
newList.add(iterator.next().copy())
其他回答
你可以使用ArrayList构造函数:
以我之见,最好也是最常用的方法是在Kotlin(1.6+)的新版本中使用集合构建器。
val shallowListCopy = buildList { addAll(list) }
对于简单的列表,上面有许多正确的解决方案。
然而,它只是用于较浅的列表。
下面的函数适用于任何二维数组列表。实际上,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
这很好。
val selectedSeries = series.toMutableList()
I can come up with two alternative ways:
1. val selectedSeries = mutableListOf<String>().apply { addAll(series) }
2. val selectedSeries = mutableListOf(*series.toTypedArray())
更新:使用新的类型推断引擎(在Kotlin 1.3中可选),我们可以省略第一个例子中的泛型类型参数,并得到:
1. val selectedSeries = mutableListOf().apply { addAll(series) }
仅供参考。选择新推理的方法是kotlinc -Xnew-inference ./SourceCode。对于命令行,或者对于Gradle, kotlin {experimental {newInference 'enable'}。有关新的类型推断的更多信息,请查看此视频:KotlinConf 2018 -新的类型推断和相关语言特性,作者:Svetlana Isakova,特别是“30岁的构建器推理”