Scala 3 — 書籍

集合

語言

Scala 函式庫包含豐富的集合類別,而這些類別包含豐富的方法。集合類別同時提供不可變和可變形式。

建立清單

為了讓您了解這些運作方式,以下提供一些使用 List 類別的範例,這是一個不可變的連結清單類別。這些範例顯示建立已填入資料的 List 的不同方式

val a = List(1, 2, 3)           // a: List[Int] = List(1, 2, 3)

// Range methods
val b = (1 to 5).toList         // b: List[Int] = List(1, 2, 3, 4, 5)
val c = (1 to 10 by 2).toList   // c: List[Int] = List(1, 3, 5, 7, 9)
val e = (1 until 5).toList      // e: List[Int] = List(1, 2, 3, 4)
val f = List.range(1, 5)        // f: List[Int] = List(1, 2, 3, 4)
val g = List.range(1, 10, 3)    // g: List[Int] = List(1, 4, 7)

List 方法

在您建立已填入資料的清單後,以下範例顯示您可以呼叫的其中一些方法。請注意,這些都是函式方法,表示它們不會變更呼叫它們的集合,而是傳回包含已更新元素的新集合。每一行傳回的結果顯示在每行的註解中

// a sample list
val a = List(10, 20, 30, 40, 10)      // List(10, 20, 30, 40, 10)

a.drop(2)                             // List(30, 40, 10)
a.dropWhile(_ < 25)                   // List(30, 40, 10)
a.filter(_ < 25)                      // List(10, 20, 10)
a.slice(2,4)                          // List(30, 40)
a.tail                                // List(20, 30, 40, 10)
a.take(3)                             // List(10, 20, 30)
a.takeWhile(_ < 30)                   // List(10, 20)

// flatten
val a = List(List(1,2), List(3,4))
a.flatten                             // List(1, 2, 3, 4)

// map, flatMap
val nums = List("one", "two")
nums.map(_.toUpperCase)               // List("ONE", "TWO")
nums.flatMap(_.toUpperCase)           // List('O', 'N', 'E', 'T', 'W', 'O')

這些範例顯示如何使用「foldLeft」和「reduceLeft」方法來加總一連串整數中的值

val firstTen = (1 to 10).toList            // List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

firstTen.reduceLeft(_ + _)                 // 55
firstTen.foldLeft(100)(_ + _)              // 155 (100 is a “seed” value)

Scala 集合類別提供更多方法,這些方法在 集合章節API 文件 中有說明。

元組

Scala 元組是一種類型,可讓您輕鬆地將不同類型的集合放入同一個容器中。例如,給定此 Person 案例類別

case class Person(name: String)

以下是建立包含 IntString 和自訂 Person 值的元組的方法

val t = (11, "eleven", Person("Eleven"))

取得元組後,您可以透過將其繫結到變數或按數字存取其值

t(0)   // 11
t(1)   // "eleven"
t(2)   // Person("Eleven")

您也可以使用此 萃取器 方法將元組欄位指派給變數名稱

val (num, str, person) = t

// result:
// val num: Int = 11
// val str: String = eleven
// val person: Person = Person(Eleven)

當您想將異質類型的集合放入類似小集合的結構中時,元組會很好用。請參閱 參考文件 以取得更多元組詳細資料。

此頁面的貢獻者