在 Rust 和 Swift 中,您可以创建一个数组和字符串的切片,它不会创建元素的新副本,而是使用范围或迭代器为您提供现有元素的视图,并在内部实现为参考对或参考+长度。
Kotlin 有类似的概念吗?它似乎有一个类似的列表概念。
很难谷歌,因为有一个名为“slice”的函数似乎可以复制元素。是我全搞错了还是漏掉了?
(我知道我可以轻松解决这个问题。顺便说一句,我没有 Java 背景。)
我不这么认为。
asList
以列表形式获取数组视图。然后您已经找到的功能 subList
就可以正常工作了。但是,我不知道 subList
相当于 Array
。从 asList
返回的列表是不可变的,因此您不能使用它来修改数组。如果您尝试通过 toMutableList
使列表可变,它只会创建一个新副本。
fun main() {
val alphabet = CharArray(26) { 'a' + it }
println(alphabet.joinToString(", "))
val listView = alphabet.asList().subList(10, 15)
println(listView)
for (i in alphabet.indices) alphabet[i] = alphabet[i].toUpperCase()
println(alphabet.joinToString(", "))
// listView is also updated
println(listView)
}
输出:
a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z
[k, l, m, n, o]
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
[K, L, M, N, O]
在 Kotlin 中首选使用列表(或集合),并且比数组对泛型和不变性有更好的支持。
如果您需要改变数组,您可能必须自己管理它,传递(引用)数组和您关心的索引的
IntRange
。