提问人:genespos 提问时间:11/11/2023 最后编辑:genespos 更新时间:11/12/2023 访问量:38
按值而不是按引用传递 List <String> 参数
Pass List <String> parameter by value instead of by reference
问:
我有这样的代码
val myFirstList = mutableListOf("Hello", "You can ", "edit, ", "run, ", "and share this code")
for (i in 0..myFirstList.size-2) {
myFun(myFirstList)
}
和这样的功能
fun myFun (myList: MutableList<String>){
myList.removeAt(0)
println(myList)
}
输出为:
[您可以 、 编辑、 、 运行 和 共享此代码]
[编辑、运行和>共享此代码]
[运行、 和共享此代码]
[并分享此代码]
但我总是需要它(只删除了第一个字符串):
[您可以 、 编辑、 、 运行 和 共享此代码]
我找到了这样的解决方法:
myFun(myFirstList.toList().toMutableList())
但我相信有一个更好的解决方案来按值而不是按引用传递列表。
提前感谢您的回答
答:
3赞
broot
11/12/2023
#1
谈到“按值传递列表”:不,没有更好的解决方案。您所说的“按值传递”实际上需要创建整个列表的完整副本。由于此类操作对资源的影响相当大,因此它不会隐式发生 - 我们必须显式执行。您可以跳过并仅保留: ,因此我们不会复制数据两次。toList()
myFirstList.toMutableList()
但是,谈到您的具体情况,也许有比创建副本更好的选择,但这完全取决于您的需求。如果你总是只删除第一项,那么也许你应该做一次,在外面,并重复使用相同的,已经剪切的列表。您也可以尝试: .它创建列表的视图,因此它不会复制数据,而只是包装原始列表。但同样,这完全取决于您的具体情况。myFun()
myList.subList(1, myList.size)
评论
0赞
genespos
11/12/2023
就我而言,我选择了(这就是我想要的)myList.subList
评论
removeAt(0)