arrays - Kotlin 是否支持像 Rust 和 Swift 这样的引用字符串/数组切片?
问题描述
在Rust和Swift中,你可以创建一个数组和字符串的切片,它不会创建元素的新副本,但可以使用范围或迭代器查看现有元素,并在内部实现引用对或引用 +长度。
Kotlin 有类似的概念吗?list似乎有类似的概念。
谷歌很难,因为有一个名为“ slice ”的函数似乎可以复制元素。我是不是全都弄错了,还是丢失了?
(我知道我可以轻松解决它。顺便说一句,我没有 Java 背景。)
解决方案
我不这么认为。
您可以使用asList
以列表形式获取 Array 的视图。然后您已经找到的功能subList
照常工作。但是,我不知道subList
for Array
s 的等价物。从返回的列表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 中首选使用列表(或Collections),并且与数组相比,它对泛型和不变性的支持要好得多。
如果您需要改变数组,您可能必须自己管理它,传递(对)数组和IntRange
您关心的索引的一个(引用)。
推荐阅读
- javascript - 从 Quasar 检索“QMediaPlayer”上的事件值
- rust - 如何通过对同一特征的双重引用为可迭代实现特征
- imagemagick - 将 Ubuntu 升级到 20.04 后 Imagemagick 出现问题
- python - Sklearn 线性回归输出
- android - 从路径生成位图列表以在画布上绘制它们很慢
- html - 引导对齐中的两个导航栏
- python - 在绘图中选择 x 轴的特定部分
- javascript - 为什么 express 无法在 views 文件夹中查找 ejs 文件?
- typescript - 为预实例化的类创建类型
- mysql - TRIGGER 中的 MySql 语法错误:我的触发代码中的错误是什么?