iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
0

當我們在整理東西的時候,通常會拿有格子的容器,把同類型的東西一格一格的放好,方便我們儲存、排列或抽換。Collection(集合)就是程式語言裡的這種有格子的容器,每當我們使用程式來處理資料時,往往會把相同型別的物件放在一個 Collection 裡,方便我們增刪、排序、搜尋。在 Kotlin 基本語法一章裡,我們有提到幾個常用的資料型別,其中 Array 就是 Collection 的一種,在大部份的程式語言裡也都有它。在這篇文章裡,就以 Array 為主角來介紹它。

什麼是 Array?

Array 是最簡單的 Kotlin Collection,它是一個承裝相同型別資料的有序結構。它有幾個重要的特點:

  • 它是一個容量固定且只能存放相同型別的容器
  • 它是一個靜態的容器,意指它無法放大或縮小
  • 容器裡的每一格都有自己的編號,我們稱為 index。這個編號是以 0 為開頭,第一格的 index 是 0、第二格是 1,以此類推。換句話說,Array 的最後一個元素就是 Array 長度減一。
  • 我們可以用迴圈取出容器裡每一格的內容,也可以用 index 取出指定格子裡的內容

宣告 Array

宣告 Array 很簡單,Kotlin 標準函式庫提供了 arrayOf() 讓我們宣告一個 Array。

val arrayOfNumbers = arrayOf(2, 3, 5, 6, 10)

透過 Kotlin 的型別推斷,arrayOfNumbers 的型別就會是 Array<Int>。要注意的是,Array 裡只能放相同型別的資料,假如你試圖在 Array 裡放入 String 的話,程式是會出錯的喔!假如你今天需要宣告一個空的 Array,則有幾種可行的作法:

val emptyArray = arrayOf<Int>() // 型別是 Array<Int>
val emptyArray = emptyArray<Int>() // 型別是 Array<Int>
val emptyArray = arrayOfNulls<Int?> (0) // 型別是 Array<Int?>

從 Java 轉換過來的開發者可能在找 Primitive Type 的 Array?假如你的程式是跑在 JVM 上,而且你想要使用 Java 的 Primitive Type,Kotlin 標準函式庫也提供了 intArrayOf()booleanArrayOf()floatArrayOf()doubleArrayOf() 等函式,方便你建立 Primitive Type 的 Array 來取得更好的效能。

val intArray = intArrayOf(2, 3, 5, 10)

操作 Array

當我們把資料放進 Array 後,我們可以用 index 或是迴圈來取得其中的資料:

val arrayOfNumbers = arrayOf(2, 3, 5, 6, 10)
val firstValue = arrayOfNumbers[0] // 取得 index 是 0 的值

for (item in arrayOfNumbers) {
    println(item) // 會一行一行印出 2 3 5 6 10
}

我們也可以用 Array 的屬性或方法來取得 Array 的資訊,或是做資料處理:

val arrayOfNumbers = arrayOf(2, 3, 5, 6, 10)
val size = arrayOfNumbers.size // 以屬性取得 Array 的大小
val sum = arrayOfNumbers.sum() // 計算出 Array 裡所有數字的總合
val average = arrayOfNumbers.average() // 計算出 Array 裡所有數字的平均值
val first = arrayOfNumbers.first() // 取出第一格資料
val last = arrayOfNumbers.last() // 取出最後一格資料
val min = arrayOfNumbers.minOrNull() // 取出 Array 裡的最小值或 Null
val max = arrayOfNumbers.maxOrNull() // 取出 Array 裡的最大值或 Null

Array 非萬能

除了剛剛提到的,Array 只能放相同型別的資料外,還有幾個特點是需要注意的:

  • Array 的長度(或說容量)是固定的。也就是說,宣告的時候說這個 Array 只有 4 格,那宣告後就沒辦法增加到 5 格了
  • Array 的長度雖然是 Immutable 的,但 Array 的內容卻是 Mutable 的,也就是說你隨時都可以修改 Array 裡的內容
  • val 會限制 Array 的參考是不可變的,但假如使用 var 的話,則可以修改參考

聽完以上的條件,覺得 Array 的限制很多?沒關係,Kotlin 的 Collection 家族裡還有其他成員,下一章節作者會為大家介紹 List。

參考資料


上一篇
第六天:Kotlin 基礎語法
下一篇
第八天:Kotlin Collection 之 List
系列文
新手也能懂的 Kotlin Collection 賞玩門道31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言