![]() |
1
99
首先,并非所有复制列表都是不好的。有时,一个拷贝可以利用CPU缓存并且速度极快,这取决于列表、大小和其他因素。
其次,为了“就地”修改列表,您需要使用一种可变的列表类型。在您的示例中,您使用
这将在迭代发生时更改列表中的值,对于所有列表类型都是有效的。为了使这一点更容易,请创建可重用的有用扩展函数(见下文)。 使用简单扩展函数进行突变:
您可以为Kotlin编写扩展函数,对任何
这是一个
实例 调用此扩展函数的任何变体:
这并非一概而论
阵列的扩展函数您可以使用类似的方法处理泛型数组:
对于每个基元数组,使用以下变量:
关于仅使用参考等式的优化
上面的扩展函数进行了一点优化,如果该值未更改为其他实例,则不设置该值,使用
扩展功能的单元测试
下面是单元测试用例,显示了函数的工作情况,并与stdlib函数进行了小的比较
|
![]() |
2
2
下面是我想到的,这与Jayson的方法类似:
|
|
3
0
下面是一个定制的解决方案,示例如下:
以下是“forEachMutable”的代码:
最大值 |
![]() |
4
-2
不必编写任何新的扩展方法——是的,函数范式很棒,但它们 做 通常意味着不可变性。如果你正在变异,你可以考虑通过老一套的方式让它变得含蓄:
|
|
5
-4
您可以使用列表。对于每个{item->item.modify()} 这将在迭代时修改列表中的每个项。 |
![]() |
A. Cedano · 如何在UIState中包含错误案例? 4 月前 |
![]() |
Murilo · Jetpack编写导航栏项目图标 4 月前 |
![]() |
zplot · 使用具有抽象嵌套类的泛型时类型不匹配 5 月前 |