Kotlin - 集合



Kotlin 集合是一個無序的專案集合。Kotlin 集合可以是可變的(mutableSetOf)或只讀的(setOf)。Kotlin 可變或不可變集合不允許包含重複元素。

建立 Kotlin 集合

對於集合建立,請使用標準庫函式 setOf() 用於只讀集合,mutableSetOf() 用於可變集合。

可以透過將其轉換為 Set 來獲得可變集合的只讀檢視。

示例

fun main() {
    val theSet = setOf("one", "two", "three", "four")
    println(theSet)
    
    val theMutableSet = mutableSetOf("one", "two", "three", "four")
    println(theMutableSet)
}

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

[one, two, three, four]
[one, two, three, four]

遍歷 Kotlin 集合

有多種方法可以遍歷 Kotlin 集合。讓我們逐一學習它們

使用 toString() 函式

fun main() {
    val theSet = setOf("one", "two", "three", "four")
    println(theSet.toString())
}

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

[one, two, three, four]

使用迭代器

fun main() {
    val theSet = setOf("one", "two", "three", "four")
    
   val itr = theSet.asIterable().iterator()
    while (itr.hasNext()) {
        println(itr.next())
    }
}

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

one
two
three
four

使用 for 迴圈

fun main() {
   val theSet = setOf("one", "two", "three", "four")
    
   for (i in theSet.indices) {
      println(theSet.elementAt(i))
   }
}

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

one
two
three
four

使用 forEach

fun main() {
   val theSet = setOf("one", "two", "three", "four")
    
   theSet.forEach { println(it) }
}

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

one
two
three
four
注意 - 此處 it 的作用類似於 Java 中的 this 運算子。

Kotlin 集合的大小

我們可以使用 size 屬性來獲取集合中元素的總數

fun main() {
    val theSet = setOf("one", "two", null, "four", "five")
    
    println("Size of the Set " + theSet.size)
}

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

Size of the Set 5

“in”運算子

in 運算子可用於檢查集合中是否存在元素。

示例

fun main() {
   val theSet = setOf("one", "two", "three", "four")
    
   if("two" in theSet){
      println(true)
   }else{
      println(false)
   }
}

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

true

contain() 方法

contain() 方法也可用於檢查集合中是否存在元素。

示例

fun main() {
   val theSet = setOf("one", "two", "three", "four")

   if(theSet.contains("two")){
      println(true)
   }else{
      println(false)
   }
    
}

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

true

isEmpty() 方法

如果集合為空(不包含任何元素),則 isEmpty() 方法返回 true,否則返回 false。

示例

fun main() {
   val theSet = setOf("one", "two", "three", "four")
    
   if(theSet.isEmpty()){
      println(true)
   }else{
      println(false)
   }
}

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

false

indexOf() 方法

indexOf() 方法返回集合中指定元素第一次出現的索引,如果集合中不包含指定元素,則返回 -1。

示例

fun main() {
   val theSet = setOf("one", "two", "three", "four")
    
   println("Index of 'two' -  " + theSet.indexOf("two"))
}

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

Index of 'two' -  1

elementAt() 方法

elementAt() 方法可用於獲取集合中指定索引處的元素。

示例

fun main() {
   val theSet = setOf("one", "two", "three", "four")

   println("Element at 3rd position " + theSet.elementAt(2))
}

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

Element at 3rd position three

集合新增

我們可以使用 + 運算子將兩個或多個集合新增到單個集合中。這會將第二個集合新增到第一個集合中,並丟棄重複的元素。

示例

fun main() {
    val firstSet = setOf("one", "two", "three")
    val secondSet = setOf("one", "four", "five", "six")
    val resultSet = firstSet + secondSet
    
    println(resultSet)
}

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

[one, two, three, four, five, six]

集合減法

我們可以使用 - 運算子從另一個集合中減去一個集合。此操作將從第一個集合中刪除公共元素,並返回結果。

示例

fun main() {
    val firstSet = setOf("one", "two", "three")
    val secondSet = setOf("one", "five", "six")
    val resultSet = firstSet - secondSet
    
    println(resultSet)
}

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

[two, three]

移除集合中的 null

我們可以使用 filterNotNull() 方法從集合中移除 null 元素。

fun main() {
    val theSet = setOf("one", "two", null, "four", "five")
    val resultSet = theSet.filterNotNull()
    
    println(resultSet)
}

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

[one, two, four, five]

排序元素

我們可以使用 sorted() 方法按升序排序元素,或使用 sortedDescending() 方法按降序排序集合元素。

fun main() {
    val theSet = setOf(10, 20, 30, 31, 40, 50, -1, 0)
    var resultSet = theSet.sorted()
    println(resultSet)
    
    resultSet = theSet.sortedDescending()
    println(resultSet)
}

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

[-1, 0, 10, 20, 30, 31, 40, 50]
[50, 40, 31, 30, 20, 10, 0, -1]

過濾元素

我們可以使用 filter() 方法過濾掉與給定謂詞匹配的元素。

fun main() {
    val theSet = setOf(10, 20, 30, 31, 40, 50, -1, 0)
    val resultSet = theSet.filter{ it > 30}
    
    println(resultSet)
}

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

[31, 40, 50]

刪除前 N 個元素

我們可以使用 drop() 方法刪除集合中的前 N 個元素。

fun main() {
    val theSet = setOf(10, 20, 30, 31, 40, 50, -1, 0)
    val resultSet = theSet.drop(3)
    
    println(resultSet)
}

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

[31, 40, 50, -1, 0]

分組集合元素

我們可以使用 groupBy() 方法對與給定謂詞匹配的元素進行分組。

fun main() {
    val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultSet = theSet.groupBy{ it % 3}
    
    println(resultSet)
}

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

{1=[10, 31, 40], 0=[12, 30, 9, -3, 0]}

對映集合元素

我們可以使用 map() 方法使用提供的函式對映所有元素。

fun main() {
    val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultSet = theSet.map{ it / 3 }
    
    println(resultSet)
}

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

[3, 4, 10, 10, 13, 3, -1, 0]

集合元素分塊

我們可以使用 chunked() 方法從集合中建立給定大小的塊。根據集合中元素的總數,最後一個塊的元素數量可能不等於塊大小。

fun main() {
    val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultSet = theSet.chunked(3)
    
    println(resultSet)
}

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

[[10, 12, 30], [31, 40, 9], [-3, 0]]

集合元素視窗化

我們可以使用 windowed() 方法透過在元素集合上移動給定大小的滑動視窗來建立元素範圍集合。

fun main() {
    val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultSet = theSet.windowed(3)
    
    println(resultSet)
}

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

[[10, 12, 30], [12, 30, 31], [30, 31, 40], [31, 40, 9], [40, 9, -3], [9, -3, 0]]

預設情況下,滑動視窗每次移動一步,但我們可以透過傳遞自定義步長值來更改它。

fun main() {
    val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultSet = theSet.windowed(3, 3)
    
    println(resultSet)
}

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

[[10, 12, 30], [31, 40, 9]]

Kotlin 可變集合

我們可以使用 mutableSetOf() 建立可變集合,之後我們可以使用 add() 向同一個集合中新增更多元素,並可以使用 remove() 方法從集合中刪除元素。

fun main() {
    val theSet = mutableSetOf(10, 20, 30)
    
    theSet.add(40)
    theSet.add(50)
    println(theSet)
    
    theSet.remove(10)
    theSet.remove(30)
    println(theSet)
    
}

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

[10, 20, 30, 40, 50]
[20, 40, 50]

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

問題 1 - 我們可以將可變 Kotlin 集合設為不可變的嗎?

A - 是的

B - 否

答案:A

解釋

是的,我們可以透過將其轉換為 Set 來將可變集合轉換為不可變集合。

問題 2 - 我們可以使用 + 運算子新增兩個或多個集合並建立一個單個集合。

A - 正確

B - 錯誤

答案:A

解釋

是的,我們可以新增或減去兩個 Kotlin 集合並生成第三個集合。加號的作用類似於集合的 union()

問題 2 - 哪個方法將返回給定 Kotlin 集合索引中的專案?

A - get()

B - elementAt()

C - 使用集合變數直接索引

D - 以上都不是

答案:B

解釋

elementAt() 方法用於從給定索引獲取列表元素。

廣告
© . All rights reserved.