Kotlin陣列


陣列是IntString等類似資料型別的集合。Kotlin中的陣列本質上是可變的,具有固定大小,這意味著可以對陣列元素執行讀寫操作。

陣列的建構函式

使用指定的大小和init函式宣告陣列建構函式。 init函式用於返回帶有索引的陣列元素。

Array(size: Int, init: (Int) -> T)

可以使用arrayOf()intArrayOf()charArrayOf()booleanArrayOf()longArrayOf()shortArrayOf()byteArrayOf()函式建立Kotlin陣列。

Kotlin陣列宣告 - 使用arrayOf()函式

var myArray1 = arrayOf(1,10,4,6,15)  
var myArray2 = arrayOf<Int>(1,10,4,6,15)  
val myArray3 = arrayOf<String>("Ajax","Prake","Michel","John","Curry")  
var myArray4= arrayOf(1,10,4, "Ajax","Prake")

Kotlin陣列宣告 - 使用intArrayOf()函式

var myArray5: IntArray = intArrayOf(5,10,20,12,15)

修改和存取陣列的元素

Kotlin陣列有set()get()函式,可以分別直接修改和存取陣列的特定元素。

陣列set()函式用於在特定索引位置設定元素。 這也可以通過在陣列索引處分配元素來完成。 陣列 get()函式用於從指定的索引獲取元素。

Kotlin陣列set()函式範例

fun main(args: Array<String>) {
    val array1 = arrayOf(1,2,3,4)
    val array2 = arrayOf<Long>(11,12,13,14)
    array1.set(0,5)
    array1[2] = 6

    array2.set(2,10)
    array2[3] = 8

    for(element in array1){
        println(element)
    }
    println()
    for(element in array2){
        println(element)
    }
}

執行上面範例程式碼,得到以下結果 -

5
2
6
4

11
12
10
8

Kotlin陣列get()函式範例

fun main(args: Array<String>) {
    val array1 = arrayOf(1,2,3,4)
    val array2 = arrayOf<Long>(11,12,13,14)
    println(array1.get(0))
    println(array1[2])
    println()
    println(array2.get(2))
    println(array2[3])
}

執行上面範例程式碼,得到以下結果 -

1
3

13
14

Kotlin陣列範例1:

在這個例子中,只是初始化一個大小為5的陣列,預設值為0並遍歷元素。 陣列的索引值從0開始。陣列的第一個元素放在索引值0,最後一個元素放在一個小於陣列大小1索引的元素。

fun main(args: Array<String>){
    var myArray = Array<Int>(5){0}

    for(element in myArray){
        println(element)
    }
}

執行上面範例程式碼,得到以下結果 -

0
0
0
0
0

Kotlin陣列範例2:

還可以使用其索引值重寫陣列的值。 因為可以修改陣列的值,所以陣列稱為可變屬性。

例如:

fun main(args: Array<String>){
    var myArray = Array<Int>(5){0}

    myArray[1]= 10
    myArray[3]= 15

    for(element in myArray){
        println(element)
    }
}

執行上面範例程式碼,得到以下結果 -

0
10
0
15
0

Kotlin陣列範例3 - 使用arrayOf()和intArrayOf()函式:
Kotlin中的陣列也可以使用庫函式宣告,例如arrayOf()intArrayOf()等。下面來看看使用arrayOf()intArrayOf()函式的陣列範例。

fun main(args: Array<String>){
    val name = arrayOf<String>("Ajax","Prake","Michel","John","Sumit")
    var myArray2 = arrayOf<Int>(1,10,4,6,15)
    var myArray3 = arrayOf(5,10,20,12,15)
    var myArray4= arrayOf(1,10,4, "Ajax","Prake")
    var myArray5: IntArray = intArrayOf(5,10,20,12,15)

    for(element in name){
        println(element)
    }

    println()
    for(element in myArray2){
        println(element)
    }
    println()
    for(element in myArray3){
        println(element)
    }
    println()
    for(element in myArray4){
        println(element)
    }
    println()
    for(element in myArray5){
        println(element)
    }

}

執行上面範例程式碼,得到以下結果 -

Ajax
Prake
Michel
John
Sumit

1
10
4
6
15

5
10
20
12
15

1
10
4
Ajax
Prake

5
10
20
12
15

Kotlin陣列範例4

假設當嘗試在索引位置插入一個大於陣列大小的元素時會發生什麼情況?

它將丟擲一個ArrayIndexOutOfBoundException。 這是因為嘗試插入元素時不存在索引值。 因此,陣列是固定大小長度。 例如:

fun main(args: Array<String>){
    var myArray5: IntArray = intArrayOf(5,10,20,12,15)

    myArray5[6]=18 // ArrayIndexOutOfBoundsException
    for(element in myArray5){
        println(element)
    }
}

執行上面範例程式碼,得到以下結果 -

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    at HelloWorldKt.main(HelloWorld.kt:4)

Kotlin陣列例5 - 遍歷使用範圍:

還可使用索引範圍(minValue..maxValue)或(maxValue..minValue)遍歷Kotlin的陣列元素。 讓我們來看看一個使用範圍遍歷陣列的範例。

fun main(args: Array<String>){
    var myArray5: IntArray = intArrayOf(5,10,20,12,15)

    for (index in 0..4){
        println(myArray5[index])
    }
    println()
    for (index in 0..myArray5.size-1){
        println(myArray5[index])
    }
}

執行上面範例程式碼,得到以下結果 -

5
10
20
12
15

5
10
20
12
15