Kotlin Tutorial(7)陣列 by Michael | CodeData
top

Kotlin Tutorial(7)陣列

分享:
tags: Array kotlin

Kotlin Tutorial(6)迴圈與範圍 << 前情

應用程式經常需要處理大量同樣型態的資料,例如計算一些年齡的平均。Kotlin提供陣列資料型態,可以宣告與建立固定元素個數的陣列變數,搭配迴圈處理陣列裡面的元素,很容易完成應用程式的需求。

基本資料型態陣列

如果應用程式需要數量比較多的資料,例如整數、小數、字元或邏輯資料,可以使用下面的型態宣告陣列變數:

  • ByteArray
  • ShortArray
  • IntArray
  • LongArray
  • FloatArray
  • DoubleArray
  • CharArray
  • BooleanArray

下面是宣告陣列變數的語法:

val <name>: xxxArray = xxxArray(<元素個數>)
// 可以省略型態的設定
val <name> = xxxArray(<元素個數>)

根據應用程式的需求,建立好陣列變數以後,Kotling會依照下面的說明,自動為每一個陣列的元素設定預設值:

  • ByteArray、ShortArray、IntArray:0
  • LongArray:0L
  • FloatArray:0.0F
  • DoubleArray:0.0
  • CharArray:編碼為0的字元
  • BooleanArray:false

下面的程式片段示範建立陣列與設定元素值的作法:

// 宣告與建立有三個元素的Int陣列
val ages: IntArray = IntArray(3)

// 設定元素值,第一個元素的編號是0
ages[0] = 35
ages[1] = 12
ages[2] = 27

使用迴圈處理陣列元素

建立與設定好的陣列變數,可以使用下面的for迴圈語法,依序處理所有陣列的元素:

for (<name> in <array>) {
    ...
}

下面的程式片段示範使用for迴圈顯示所有陣列元素的作法:

val ages: IntArray = IntArray(3)
...
// 使用for迴圈依序處理陣列所有元素
// 迴圈執行的次數就是元素個數
// 每執行一次都會把元素值指定給element變數
for (element in ages) {
    println(element)
}

在處理陣列元素的時候,如果需要使用元素的編號,可以使用下面的for迴圈語法:

for (<index> in <array>.indices) {
    ...
}    

下面的程式片段示範使用for迴圈顯示所有陣列元素編號與值的作法:

val ages: IntArray = IntArray(3)
...

// 陣列.indices:根據陣列的元素個數傳回範圍運算式
// ages.indices傳回0..2
for (i in ages.indices) {
    println("[$i]: ${ages[i]}")
}

// 顯示:
// [0]: 35
// [1]: 12
// [2]: 27

在處理陣列元素的時候,如果同時需要使用元素的編號與元素值,可以使用下面的for迴圈語法:

for (<index, value> in <array>.withIndex()) {
    ...
}        

下面的程式片段示範使用for迴圈顯示所有陣列元素編號與值的作法:

val ages: IntArray = IntArray(3)
...

// 陣列.withIndex():傳回元素編號與元素值成對的資料
// 搭配for迴圈使用這樣的語法:
// for ( (元素編號變數, 元素值變數) in 陣列.withIndex() ) ...
for ((i, v) in ages.withIndex()) {
    println("[$i]: $v")
}

// 顯示:
// [0]: 35
// [1]: 12
// [2]: 27

瞭解陣列的基本用法以後,就可以使用下面的範例程式執行資料合計與平均的工作:

/* net.macdidi5.kotlin.tutorial.ch07.HelloIntArray02.kt */

package net.macdidi5.kotlin.tutorial.ch07

fun main(args: Array<String>) {
    // 宣告與建立有三個元素的Int陣列
    val ages: IntArray = IntArray(3)

    // 設定元素值,第一個元素的編號是0
    ages[0] = 35
    ages[1] = 17
    ages[2] = 24

    // 宣告合計用的變數
    var total = 0

    // 使用迴圈執行所有元素的合計
    for (age in ages) {
        total += age
    }

    // 陣列.size:陣列的元素個數
    // 計算平均
    val average = total / ages.size

    println("Total: $total, Average: $average")
    // 顯示: Total: 76, Average: 25
}

建立包含元素資料的陣列

如果應用程式需要的陣列變數,在元素個數不多而且元素值都是已知的情況,可以使用下面的函式,直接建立包含元素資料的陣列:

  • byteArrayOf(Int,…)
  • shortArrayOf(Int,…)
  • intArrayOf(Int,…)
  • longArrayOf(Long,…)
  • floatArrayOf(Float,…)
  • doubleArrayOf(Double,…)
  • charArrayOf(Char,…)
  • booleanArrayOf(Boolean,…)

下面的範例程式示範建立包含元素資料陣列的作法:

/* net.macdidi5.kotlin.tutorial.ch07.HelloIntArray03.kt */

package net.macdidi5.kotlin.tutorial.ch07

fun main(args: Array<String>) {
    // 在intArrayOf函式裡面設定所有陣列的元素
    val ages = intArrayOf(35, 17, 24)

    // 宣告合計用的變數
    var total = 0

    // 使用迴圈執行所有元素的合計
    for (age in ages) {
        total += age
    }

    // 計算平均
    val average = total / ages.size

    println("Total: $total, Average: $average")
    // 顯示: Total: 76, Average: 25
}

字串陣列

如果應用程式需要數量比較多的字串資料,可以使用下面的語法建立字串陣列:

val <name>: Array<String?> = arrayOfNulls<String>(<元素個數>)
val <name> = arrayOfNulls<String>(<元素個數>)
val <name>: Array<String?> = arrayOfNulls(<元素個數>)

使用上面語法建立的字串陣列,所有元素的預設值為「null」,表示並沒有字串物件。下面的範例程式示範建立與使用字串陣列的作法:

/* net.macdidi5.kotlin.tutorial.ch07.HelloStringArray01.kt */

package net.macdidi5.kotlin.tutorial.ch07

fun main(args: Array<String>) {
    // 宣告與建立有三個元素的String陣列
    val names: Array<String?> = arrayOfNulls<String>(3)

    // 可以省略型態
    //val names = arrayOfNulls<String>(3)
    // 如果要使用型態,就可以省略arrayOfNulls後面的<String>
    //val names: Array<String?> = arrayOfNulls(3)

    // 設定元素值,第一個元素的編號是0
    names[0] = "Simon"
    names[1] = "Mary"
    names[2] = "Sam"

    // 使用for迴圈依序處理陣列所有元素
    // 迴圈執行的次數就是元素個數
    // 每執行一次都會把元素值指定給element變數
    for (element in names) {
        println(element)
    }

    // 顯示:
    // Simon
    // Mary
    // Sam

    println()

    // 陣列.indices:根據陣列的元素個數傳回範圍運算式
    // ages.indices傳回0..2
    for (i in names.indices) {
        println("[$i]: ${names[i]}")
    }

    // 顯示:
    // [0]: Simon
    // [1]: Mary
    // [2]: Sam

    println()

    // 陣列.withIndex():傳回元素編號與元素值成對的資料
    // 搭配for迴圈使用這樣的語法:
    // for ( (元素編號變數, 元素值變數) in 陣列.withIndex() ) ...
    for ((i, v) in names.withIndex()) {
        println("[$i]: $v")
    }

    // 顯示:
    // [0]: Simon
    // [1]: Mary
    // [2]: Sam
}

如果應用程式需要的字串陣列變數,在元素個數不多而且元素值都是已知的情況,可以使用下面的函式,直接建立包含元素資料的字串陣列:

val <name>: Array<String> = arrayOf<String>(String,...)
val <name>: Array<String> = arrayOf(String,...)
val <name> = arrayOf<String>(String,...)
val <name> = arrayOf(String,...)

下面的範例程式示範建立包含字串元素資料陣列的作法:

/* net.macdidi5.kotlin.tutorial.ch07.HelloStringArray02.kt */

package net.macdidi5.kotlin.tutorial.ch07

fun main(args: Array<String>) {
    // 宣告與建立有三個元素的String陣列
    val names = arrayOf("Simon", "Mary", "Sam")

    for (element in names) {
        println("Hello!, ${element.toUpperCase()}!")
    }

    // 顯示:
    // Hello!, SIMON!
    // Hello!, MARY!
    // Hello!, SAM!
}

下一步

在瞭解陣列變數以後,接下來要說明字串物件變數的宣告、建立與使用。

相關的檔案都可以在GitHub瀏覽與下載。

https://github.com/macdidi5/Kotlin-Tutorial

後續 >> Kotlin Tutorial(8)字串

分享:
按讚!加入 CodeData Facebook 粉絲群

相關文章

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

Pitar Tang07/22

大大你好 請問有關Kotlin Tutorial系列還會更新嗎
真的很詳細很捧

關於作者

張益裕。目前的工作是講師與作者,專長是教育訓練課程規劃、教材編製與課程推廣,技術書籍與專欄寫作。涵蓋的領域有OOAD、Java程式設計、JavaFX、Java Embedded、Android與SQL。已出版電子書Google Play圖書Pubu

熱門論壇文章

熱門技術文章