我有这样的代码
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())
但我确信有更好的解决方案可以按值而不是按引用传递列表。
提前感谢您的回答
谈到“按值传递列表”:不,没有更好的解决方案。您所谓的“按值传递”实际上需要创建整个列表的完整副本。由于此类操作对资源的占用相当大,因此它不会隐式发生 - 我们必须显式地执行。您可以跳过
toList()
并仅保留:myFirstList.toMutableList()
,这样我们就不会复制数据两次。
但是,就您的具体情况而言,也许有比创建副本更好的选择,但这完全取决于您的需求。如果您总是只删除第一项,那么也许您应该在
myFun()
之外执行一次,并重复使用相同的已剪切列表。你可以尝试:myList:subList(1, myList.size)
。 Tt 创建列表的视图,因此它不会复制数据,而仅包装原始数据。但同样,这一切都取决于您的具体情况。