跳转至

Kotlin 数组

原文: http://zetcode.com/kotlin/arrays/

Kotlin 数组教程展示了如何在 Kotlin 中使用数组。

数组是固定数量的值的集合。 数组项称为数组的元素。 每个元素都可以由索引引用。 数组从零开始。

使用诸如arrayOf()intArrayOf()之类的函数或诸如IntArrayFloatArray之类的类创建 Kotlin 数组。

Kotlin 数组初始化

在第一个示例中,我们展示了如何在 Kotlin 中初始化数组。

KotlinArrayInit.kt

package com.zetcode

import java.util.Arrays

fun main() {

    val nums = arrayOf(1, 2, 3, 4, 5)
    println(Arrays.toString(nums))

    val nums2 = (3..12).toList().toTypedArray()
    println(Arrays.toString(nums2))

    val nums3 = IntArray(5, { i -> i * 2 + 3})
    println(Arrays.toString(nums3))
}

该示例创建三个数组。

val nums = arrayOf(1, 2, 3, 4, 5)

使用arrayOf()函数创建一个数组。

println(Arrays.toString(nums))

我们使用Arrays' toString()方法来打印数组的内容。

val nums2 = (3..12).toList().toTypedArray()

在这一行中,我们根据一系列数字创建一个数组。

val nums3 = IntArray(5, { i -> i * 2 + 3})

该行使用IntArray创建一个数组。 它以元素数量和工厂功能为参数。

[1, 2, 3, 4, 5]
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
[3, 5, 7, 9, 11]

这是输出。

Kotlin 数组索引

下一个示例显示 Kotlin 中的数组索引操作。

KotlinArrayIndexing.kt

package com.zetcode

fun main() {

    val nums = intArrayOf(1, 2, 3, 4, 5)

    println(nums[2])

    nums[0] = 11
    println(nums[0])
}

我们使用索引操作来获取和修改数组值。

println(nums[2])

我们用索引 2 打印该值,即数组中的第三个元素。 数组值的索引添加在一对方括号之间。

Kotlin 数组基本操作

以下示例介绍了 Kotlin 数组的一些基本操作。

KotlinArrayBasicOperations.kt

package com.zetcode

import java.util.Arrays

fun main() {

    val nums = arrayOf(1, 2, 3, 4, 5)
    println(nums.get(0))

    nums.set(0, 0)
    println(Arrays.toString(nums))

    val nums2 = nums.plus(1)
    println(Arrays.toString(nums2))

    val slice = nums.sliceArray(1..3)
    println(Arrays.toString(slice))

    println(nums.first())
    println(nums.last())
    println(nums.indexOf(5))
}

在该示例中,我们检索和修改数组元素,创建切片,并获取元素的索引。

println(nums.get(0))

我们使用get()函数获得索引为 0 的元素。

nums.set(0, 0)

set()方法将指定索引处的数组元素设置为指定值。

val nums2 = nums.plus(1)

我们向数组添加一个新元素,创建一个新数组。 (请记住,数组是固定大小的;因此,创建了一个新的数组)。

val slice = nums.sliceArray(1..3)

使用sliceArray()方法,我们从数组中创建一个切片。 索引都包含在内。

println(nums.first())
println(nums.last())

我们得到数组的第一个和最后一个元素。

println(nums.indexOf(5))

我们获得元素 5 首次出现的索引。

1
[0, 2, 3, 4, 5]
[0, 2, 3, 4, 5, 1]
[2, 3, 4]
0
5
4

这是输出。

Kotlin 数组内置方法

在下面的示例中,我们使用一些内置的数组方法。

KotlinArrayBuiltins.kt

package com.zetcode

fun main() {

    val nums = intArrayOf(1, 2, 3, 4, 5)

    val avg = nums.average()
    println("The average is $avg")

    val nOfValues = nums.count()
    println("There are $nOfValues elements")

    val sumOfValues = nums.sum()
    println("The sum of values is $sumOfValues")

    val maxValue = nums.max()
    println("The maximum is $maxValue")

    val minValue = nums.min()
    println("The minimum is $minValue")
}

该示例计算数组的平均值,总和,最大值,最小值和大小。

val avg = nums.average()

average()函数计算数组值的平均值。

val nOfValues = nums.count()

元素数由count()确定。

The average is 3.0
There are 5 elements
The sum of values is 15
The maximum is 5
The minimum is 1

这是示例的输出。

Kotlin 数组计数

count()方法对数组中的元素进行计数。

KotlinArrayCount.kt

package com.zetcode

fun main() {

    val nums = intArrayOf(2, 3, 4, 5, 6, 7)

    println("There are ${nums.count()} elements in the array")

    val nOfEvens = nums.count { it % 2 == 0 }

    println("There are $nOfEvens even values in the array")
}

该示例计算数组中值的总数和偶数的数量。

There are 6 elements in the array
There are 3 even values in the array

这是输出。

Kotlin 数组遍历

在下一个示例中,我们遍历 Kotlin 数组。

KotlinTraverseArrays.kt

package com.zetcode

fun main() {

    val nums = arrayOf(1, 2, 3, 4, 5, 6, 7)

    nums.forEach({ e -> print("$e ") })

    println()

    nums.forEachIndexed({i, e -> println("nums[$i] = $e")})

    for (e in nums) {
        print("$e ")
    }

    println()

    val it: Iterator<Int> = nums.iterator()

    while (it.hasNext()) {

        val e = it.next()
        print("$e ")
    }
}

该示例使用四种不同的遍历方式遍历数组。

nums.forEach({ e -> print("$e ") })

我们使用forEach()遍历数组。 此方法对数组的每个元素应用操作。 在我们的情况下将其打印出来。

nums.forEachIndexed({i, e -> println("nums[$i] = $e")})

forEachIndexed()在每个元素上执行给定的操作,为元素提供顺序索引。

for (e in nums) {
    print("$e ")
}

我们在for循环中遍历数组。

val it: Iterator<Int> = nums.iterator()

while (it.hasNext()) {

    val e = it.next()
    print("$e ")
}

最后,我们使用迭代器和while循环遍历数组。

1 2 3 4 5 6 7 
nums[0] = 1
nums[1] = 2
nums[2] = 3
nums[3] = 4
nums[4] = 5
nums[5] = 6
nums[6] = 7
1 2 3 4 5 6 7 
1 2 3 4 5 6 7 

这是示例的输出。

Kotlin 数组排序

我们展示了如何对 Kotlin 数组进行排序。

KotlinArraySort.kt

package com.zetcode

fun main() {

    val nums = arrayOf(7, 3, 3, 4, 5, 9, 1)

    val sortedNums = nums.sortedArray()
    println(Arrays.toString(sortedNums))

    val sortedNumsDesc = nums.sortedArrayDescending()
    println(Arrays.toString(sortedNumsDesc))
}

该示例对数组进行排序,其中sortedArray()为升序,sortedArrayDescending()为降序。 该方法创建新的排序数组。

[1, 3, 3, 4, 5, 7, 9]
[9, 7, 5, 4, 3, 3, 1]

这是示例的输出。

Kotlin 二维数组

在 Kotlin 中,我们可以创建二维数组。

KotlinArrayTwoDim.kt

package com.zetcode

fun main() {

    val array = arrayOf(intArrayOf(1, 2),
            intArrayOf(3, 4),
            intArrayOf(5, 6, 7))

    println(Arrays.deepToString(array))
}

该示例通过将intArrayOf()函数调用嵌套到arrayOf()函数中来创建二维数组。

[[1, 2], [3, 4], [5, 6, 7]]

这是输出。

Kotlin 数组过滤

使用filter()方法,我们可以过滤数组中的数据。

KotlinArrayFilter.kt

package com.zetcode

fun main() {

    val nums = arrayOf(1, -2, 3, 4, -5, 7)

    nums.filter { e -> e > 0 }.forEach { e -> print("$e ") }
}

本示例创建一个正负整数数组。 filter()方法仅用于拾取正值。

1 3 4 7 

这是输出。

Kotlin 数组查找元素

我们可以使用find()findLast()找到元素。

KotlinArrayFind.kt

package com.zetcode

fun main() {

    val nums = intArrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)

    val firstEven = nums.find { it % 2 == 0 }
    println("The first even value is: $firstEven")

    val lastEven = nums.findLast { it % 2 == 0 }
    println("The last even value is: $lastEven")
}

该示例在数组中查找第一个和最后一个偶数值。

The first even value is: 2
The last even value is: 8

这是输出。

Kotlin 数组归约

归约是将数组值聚合为单个值的终端操作。 reduce()方法对累加器和数组中的每个元素(从左到右)应用一个函数,以将其减小为单个值。

KotlinArrayReduce.kt

package com.zetcode

fun main() {

    val nums = intArrayOf(2, 3, 4, 5, 6, 7)

    val total = nums.reduce { product, next -> product * next }

    println(total)
}

我们使用reduce()方法从数组元素计算乘积。

val total = nums.reduce { product, next -> product * next }

product是累加器,next是数组中的下一个值。

5040

这是输出。

Kotlin 数组all()

如果所有元素都匹配给定谓词,则all()方法返回true

KotlinArrayAll.kt

package com.zetcode

fun main() {

    val nums = intArrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)

    val hasAllEvens = nums.all { it % 2 == 0 }

    if (hasAllEvens) {

        println("The array contains only even values")
    } else {

        println("The array contains odd values")
    }
}

该示例检查数组元素是否全部为偶数。

The array contains odd values

该数组包含一些奇数值。

Kotlin 数组any()

如果至少一个元素与给定谓词匹配,则any()方法返回true

KotlinArrayAny.kt

package com.zetcode

fun main() {

    val nums = intArrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)

    val hasEvenVals = nums.any { it % 2 == 0 }

    if (hasEvenVals) {

        println("The array contains even values")
    } else {

        println("The array does contain even values")
    }
}

该示例检查数组元素是否包含任何偶数值。

The array contains even values

这是输出。

在本教程中,我们介绍了 Kotlin 数组。 您可能也对相关教程感兴趣: Kotlin 列表教程Kotlin 设置教程Kotlin 映射教程或列出所有 Kotlin 教程 ]。



回到顶部