Kotlin - 陣列



陣列用於在一個變數中儲存多個相同資料型別的專案,例如在一個變數名下儲存整數或字串。

例如,如果我們需要儲存 1000 名員工的姓名,那麼與其建立 1000 個不同的字串變數,不如簡單地定義一個字串陣列,其容量為 1000。

與任何其他現代程式語言一樣,Kotlin 也支援陣列,並提供廣泛的陣列屬性和支援函式來運算元組。

在 Kotlin 中建立陣列

要在 Kotlin 中建立陣列,我們使用 arrayOf() 函式,並將值以逗號分隔列表的形式放在其中

val fruits = arrayOf("Apple", "Mango", "Banana", "Orange")

或者,我們可以提供以下資料型別

val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")

或者,可以使用 arrayOfNulls() 函式建立一個給定大小的陣列,其中填充了空元素。

原始型別陣列

Kotlin 還有一些內建的工廠方法來建立原始資料型別的陣列。例如,建立整數陣列的工廠方法是

val num = intArrayOf(1, 2, 3, 4)

其他可用於建立陣列的工廠方法

  • byteArrayOf()

  • charArrayOf()

  • shortArrayOf()

  • longArrayOf()

獲取和設定陣列的元素

我們可以使用方括號內的索引號訪問陣列元素。Kotlin 陣列索引從零 (0) 開始。因此,如果您想訪問陣列的第 4 個元素,則需要將 3 作為索引。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")  
   println( fruits [0])
   println( fruits [3])   
}

當您執行上述 Kotlin 程式時,它將生成以下輸出

Apple
Orange

Kotlin 還提供 get()set() 成員函式來獲取和設定特定索引處的值。檢視以下示例

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")
  
   println( fruits.get(0))
   println( fruits.get(3))
   
   // Set the value at 3rd index
   fruits.set(3, "Guava")
   println( fruits.get(3)) 
}

當您執行上述 Kotlin 程式時,它將生成以下輸出

Apple
Orange
Guava

Kotlin 陣列長度

Kotlin 提供了一個名為 size 的陣列屬性,它返回陣列的大小,即長度。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")
  
   println( "Size of fruits array " + fruits.size )
}

當您執行上述 Kotlin 程式時,它將生成以下輸出

Size of fruits array 4

我們還可以使用 count() 成員函式來獲取陣列的大小。

遍歷陣列

我們可以使用 for 迴圈遍歷陣列。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")
  
   for( item in fruits ){
      println( item )
   }   
}

當您執行上述 Kotlin 程式時,它將生成以下輸出

Apple
Mango
Banana
Orange

檢查元素是否存在

我們可以使用 in 運算子以及 if...else 來檢查陣列中是否存在元素。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")
  
   if ("Mango" in fruits){
      println( "Mango exists in fruits" )
   }else{
      println( "Mango does not exist in fruits" )
   }   
}

當您執行上述 Kotlin 程式時,它將生成以下輸出

Mango exists in fruits

陣列中的不同值

Kotlin 允許在陣列中儲存重複值,但同時您可以使用 distinct() 成員函式獲取儲存在陣列中的不同值的集合。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange", "Apple")
   
   val distinct = fruits.distinct()
   for( item in distinct ){
      println( item )
   }
}

當您執行上述 Kotlin 程式時,它將生成以下輸出

Apple
Mango
Banana
Orange

從陣列中刪除元素

我們可以使用 drop()dropLast() 成員函式分別從開頭或結尾刪除元素。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange", "Apple")
   
   val result = fruits.drop(2) // drops first two elements.
   for( item in result ){
      println( item )
   }
}

當您執行上述 Kotlin 程式時,它將生成以下輸出

Banana
Orange
Apple

檢查空陣列

我們可以使用 isEmpty() 成員函式來檢查陣列是否為空。如果陣列為空,則此函式返回 true。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>()
   println( "Array is empty : " + fruits.isEmpty())   
}

當您執行上述 Kotlin 程式時,它將生成以下輸出

"Array is empty : true

Kotlin 陣列類

Kotlin 的 Array 類定義了最基本的資料結構或集合,它基於連續的索引值工作。

Kotlin 的 Array 類是一個泛型集合,包含對其他物件的引用。它是一個有序的專案集合,可以使用其各自的索引進行訪問。在 kotlin 中,可以使用 arrayOf()arrayOfNulls()emptyArray() 標準庫函式建立陣列變數。

建構函式

Kotlin Array 類只有一個建構函式 -

序號 建構函式和描述
1 <init>

此建構函式建立一個具有指定大小的新陣列,其中每個元素都是透過呼叫指定的 init 函式計算的。

屬性

以下是 Kotlin Array 類中定義的屬性 -

序號 屬性和描述
1

size

它返回陣列中元素的數量。

2

indices

它返回陣列的有效索引範圍。

3

lastIndex

它返回陣列的最後一個有效索引。

函式

以下是 kotlin Array 類中定義的函式 -

序號 函式和描述
1 get()

返回指定索引處的陣列元素。

2 set()

將指定索引處的陣列元素設定為指定值。

3 iterator()

建立一個迭代器,用於迭代陣列的元素。

4 all()

如果所有元素都匹配給定的謂詞,則返回 true。

5 any()

如果陣列至少有一個元素,則返回 true。

6 average()

返回陣列中元素的平均值。

7 binarySearch()

使用二分查詢演算法搜尋陣列或陣列範圍內的提供的元素。

8 component1()

返回陣列中的第一個元素。

9 component2()

返回陣列中的第二個元素。

10 component3()

返回陣列中的第三個元素。

11 component4()

返回陣列中的第四個元素。

12 component5()

返回陣列中的第五個元素。

13 contains()

如果在陣列中找到元素,則返回 true。

14 count()

返回陣列中元素的數量。

15 distinct()

返回一個列表,其中僅包含給定陣列中的不同元素。

16 last()

返回最後一個元素。

17 distinctBy()

返回給定陣列或集合中不同元素的列表。

18 drop()

返回一個列表,其中包含除前 n 個元素之外的所有元素。

19 dropLast()

返回一個列表,其中包含除最後 n 個元素之外的所有元素。

20 dropLastWhile()

返回一個列表,其中包含除滿足給定謂詞的最後一個元素之外的所有元素。

21 dropWhile()

返回一個列表,其中包含除滿足給定謂詞的第一個元素之外的所有元素。

22 elementAtOrElse()

如果給定的索引存在於列表或集合中,則返回該索引處的元素。

23 elementAtOrNull()

返回給定索引處的元素,如果索引超出此陣列的範圍,則返回 null。

24 filter()

返回一個列表,其中僅包含與給定謂詞匹配的元素。

25 filterNot()

返回一個列表,其中包含所有不匹配給定謂詞的元素。

26 filterNotNull()

返回一個列表,其中包含所有非空元素。

27 find()

返回第一個與給定謂詞匹配的元素,如果未找到此類元素,則返回 null。

28 findLast()

返回最後一個與給定謂詞匹配的元素,如果未找到此類元素,則返回 null。

29 first()

返回第一個元素。

30 flatten()

返回給定陣列中所有陣列中所有元素的單個列表。

31 forEach()

對每個元素執行給定的操作。

32 getOrElse()

返回給定索引處的元素或呼叫 defaultValue 的結果。

33 getOrNull()

返回給定索引處的元素,如果索引超出此陣列的範圍,則返回 null。

34 groupBy()

根據給定的 keyslector 函式返回的鍵對原始陣列的元素進行分組。

35 indexOf()

返回元素的第一個索引,如果陣列不包含元素,則返回 -1。

36 indexOfFirst()

返回與給定謂詞匹配的第一個元素的索引,如果陣列不包含此類元素,則返回 -1。

37 indexOfLast()

返回與給定謂詞匹配的最後一個元素的索引,如果陣列不包含此類元素,則返回 -1。

38 intersect()

返回一個集合,其中包含此陣列和指定集合都包含的所有元素。

39 isEmpty()

如果陣列為空,則返回 true。

40 isNotEmpty()

如果陣列不為空,則返回 true。

41 isNullOrEmpty()

如果此可空陣列為 null 或為空,則返回 true。

42 joinTo()

使用分隔符附加所有元素的字串。

43 joinToString()

使用分隔符建立所有元素的字串。

44 lastIndexOf()

返回元素的最後一個索引,如果陣列不包含元素,則返回 -1。

45 lastOrNull()

返回最後一個元素,如果陣列為空,則返回 null。

46 map()

返回一個列表,其中包含將給定的轉換函式應用於原始陣列中每個元素的結果。

47 maxOf()

返回選擇器函式生成的所有值中最大的值。

48 minOf()

返回選擇器函式生成的所有值中最小的值。

49 none()

如果陣列沒有元素,則返回 true。

50 partition()

將原始陣列拆分為一對列表。

51 random()

從該陣列中返回一個隨機元素。

52 randomOrNull()

從該陣列中返回一個隨機元素,如果該陣列為空,則返回 null。

53 reduce()

有助於將陣列的元素轉換為單個結果。

54 reduceRight()

從最後一個元素開始累積值,並從右到左將操作應用於每個元素和當前累加器值。

55 reverse()

就地反轉陣列中的元素。

56 reversed()

返回一個元素順序相反的列表。

57 runningReduce()

此函式用於對陣列執行連續的累積操作。

58 shuffle()

就地隨機打亂此陣列中的元素。

59 single()

返回單個元素,如果陣列為空或具有多個元素,則丟擲異常。

60 slice()

返回一個列表,其中包含指定索引範圍內的索引處的元素。

61 sliceArray()

返回一個數組,其中包含此陣列中指定索引處的元素。

62 sortBy()

根據指定選擇器函式返回的值的自然排序順序就地對陣列中的元素進行排序。

63 sortByDescending()

根據指定選擇器函式返回的值的自然排序順序,對陣列中的元素進行降序排序(就地排序)。

64 sortDescending()

根據自然排序順序,對陣列中的元素進行降序排序(就地排序)。

65 sorted()

返回根據自然排序順序排序的所有元素的列表。

66 sortedArray()

返回一個數組,其中包含根據自然排序順序排序的此陣列的所有元素。

67 sortedArrayDescending()

返回一個數組,其中包含根據自然排序順序降序排序的此陣列的所有元素。

68 sortedBy()

返回根據指定選擇器函式返回的值的自然排序順序排序的所有元素的列表。

69 sortedByDescending()

返回根據指定選擇器函式返回的值的自然排序順序降序排序的所有元素的列表。

70 sortedDescending()

根據自然順序,按降序對陣列的元素或集合進行排序。

71 sortedWith()

根據指定的比較器或條件,將陣列的元素或集合排序到排序順序。

72 sortWith()

根據給定比較器或條件指定的順序,對給定範圍內的陣列的元素或集合進行排序。

73 subtract()

移除第一個陣列中與第二個陣列中元素匹配的所有元素。

74 sum()

返回陣列和集合中所有元素的總和。

75 sumOf()

使用應用於集合中每個元素的選擇器函式,顯示所有陣列和集合項的總和。

76 take()

返回包含前 n 個元素的列表。

77 takeLast()

返回包含最後 n 個元素的列表。

78 takeLastWhile()

返回包含滿足給定謂詞的最後幾個元素的列表。

79 takeWhile()

返回包含滿足給定謂詞的第一個元素的列表。

80 toList()

返回包含所有元素的列表。

81 toSet()

返回所有元素的集合。

82 union()

返回一個包含兩個集合中所有不同元素的集合。

測驗時間 (面試 & 考試準備)

答案:D

解釋

所有提到的關於 Kotlin 陣列的陳述都是正確的。

Q 2 - 以下程式碼段的輸出是什麼?

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")

   println( fruits [2])

}

A - Apple

B - Mango

C - Banana

D - 以上都不是

答案:C

解釋

Kotlin 索引從 0 開始,因此在索引 2 處我們將找到第 3 個元素,即 Banana。

答案:D

解釋

選項 D 是正確的,因為我們可以使用 size 屬性或 count() 函式獲取陣列的大小。

廣告