我最近意识到 Kotlin 中有两个非常相似的函数可用于获取 List
的一部分,但我不确定它们之间的区别:
返回列表中从指定 fromIndex (包括)到 toIndex (排除)之间的部分的视图。返回的列表由此列表支持,因此返回列表中的非结构性更改会反映在此列表中,反之亦然。
基础列表中的结构性更改会使视图的行为未定义。
而 有关 slice
的文档 则表示:
返回包含指定索引范围内索引处的元素的列表。
或者
返回包含指定索引处的元素的列表。
看起来主要区别是第一个函数返回列表的“一部分的视图”,以及是否反映非结构性更改?不过我不太确定这是什么意思。
我查看了 slice
函数的源代码:
public fun <T> List<T>.slice(indices: IntRange): List<T> {
if (indices.isEmpty()) return listOf()
return this.subList(indices.start, indices.endInclusive + 1).toList()
}
但它从subList
函数返回一个列表。
有人能解释一下这两个函数的区别以及何时可能更倾向于使用其中之一吗?
sublist
和slice
之间的区别,还可以使用drop
和take
功能来实现相同的效果。https://chetangupta.net/bbk7/ - Chetan Gupta