Kotlin——数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin——数组相关的知识,希望对你有一定的参考价值。

参考技术A

Kotlin为数组增加了一个Array类。为元素是基本类型的数组增加了XxxArray类(其中Xxx可以是Byte、Short、Int等基本类型)
Kotlin自己提供了一套集合体系,Kotlin的集合体系抛弃了Java集合体系中的Queue集合,Kotlin集合体系中增加了可变集合和不可变集合。

Kotlin的数组使用Array<T>来代表,Kotlin的数组就是一个Array类的实例,因此Kotlin数组是引用类型

访问数组是通过在数组的索引后跟一个[]来实现,方括号中的值是数组元素的索引值。kotlin中的[]运算值其实是get(index)、set(index,value)方法,使用[]访问数组元素,调用的其实就是get(index)方法,使用[]为数组元素赋值,调用的其实就是set(index,value)方法

上面的两种方式本质是一样的,在经过编译器编译优化后,会转换成根据数组的内存地址来访问数组元素,性能不会有任何损失

所有的数组都有 size 属性,通过这个属性可以访问到数组的长度。

for-in 循环可以自动遍历数组的每个元素

对数组使用for-in循环会被编译成使用基于索引的循环,并不会创建迭代器。因此具有良好的性能

kotlin数组提供了一个indices属性,这个属性可返回数组的索引区间

这种通过索引区间遍历的实现具有更好的性能,kotlin将会在底层将其编译成根据内存地址来访问元素,不需要额外创建区间对象

Kotlin还为数组提供了一个lastIndex属性,该属性用于返回数组最后一个元素的索引,size-1
如果需要同时访问数组的索引和元素,可以使用数组的 withIndex() ,该方法返回一个Iterable对象,该对象的所有元素都是IndexedValue.

如何从普通的JavaScript数组创建kotlin.collections.Set?

我试图从普通的JavaScript调用已编译成JavaScript的Kotlin模块。模块内部的Kotlin方法之一需要传递kotlin.collections.Set。如何从纯JavaScript数组创建这样的set对象?我查看了编译后的代码,Kotlin对Kotlin.kotlin.collections.setOf_i5x0yv$这样的方法进行了内部引用,但我认为没办法从外部调用这些代码。

答案

根据Kotlin documentation集不在Javascript中表示。

另一方面,数组被映射。因此,可以编写一个简单的函数,将Javascript数组映射到Kotlin集。

@JsName("createSetFromJsArray")
fun <TValue> createSetFromJsArray(array: Array<TValue>) = array.toSet()

从Javascript调用Kotlin函数时可以使用此函数,如下所示:

var test = ["a", "b", "c"];
aKotlinFunction(createSetFromJsArray(test));

和Kotlin函数实现如下:

@JsName("aKotlinFunction")
fun aKotlinFunction(test: Set<String>) {
    console.log("aKotlinFunction called with param ${test.joinToString()}")
}

以上是关于Kotlin——数组的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin数组

kotlin入门(3)-数组

每天学一点 Kotlin -- 集合:Array 数组

Kotlin系列之数组与集合

kotlin数组和集合

如何从普通的JavaScript数组创建kotlin.collections.Set?