通过值而不是引用传递列表<String>参数

问题描述 投票:0回答:1

我有这样的代码

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())   

但我确信有更好的解决方案可以按值而不是按引用传递列表。

提前感谢您的回答

list kotlin parameter-passing onclicklistener
1个回答
0
投票

谈到“按值传递列表”:不,没有更好的解决方案。您所谓的“按值传递”实际上需要创建整个列表的完整副本。由于此类操作对资源的占用相当大,因此它不会隐式发生 - 我们必须显式地执行。您可以跳过

toList()
并仅保留:
myFirstList.toMutableList()
,这样我们就不会复制数据两次。

但是,就您的具体情况而言,也许有比创建副本更好的选择,但这完全取决于您的需求。如果您总是只删除第一项,那么也许您应该在

myFun()
之外执行一次,并重复使用相同的已剪切列表。你可以尝试:
myList:subList(1, myList.size)
。 Tt 创建列表的视图,因此它不会复制数据,而仅包装原始数据。但同样,这一切都取决于您的具体情况。

© www.soinside.com 2019 - 2024. All rights reserved.