集合

簡介

語言

集合架構是 Scala 2.13 標準函式庫的核心,也用於 Scala 3.x。它提供一個通用、統一且包羅萬象的集合類型架構。這個架構讓您可以在高層級使用記憶體中的資料,程式碼的基本建構區塊是整個集合,而不是個別元素。

這種程式設計風格需要一些學習。幸運的是,Scala 集合的幾個特性有助於適應。它們易於使用、簡潔、安全、快速、通用。

易於使用:只要 20-50 個方法的小型詞彙就足以在幾個操作中解決大多數集合問題。無需費心思考複雜的迴圈結構或遞迴。持久集合和無副作用操作表示您不必擔心意外地使用新資料損壞現有集合。已消除迭代器和集合更新之間的干擾。

簡潔:您可以使用單字達成過去需要一個或多個迴圈才能完成的事項。您可以使用輕量級語法表達函式操作,並毫不費力地結合操作,因此結果感覺就像自訂代數。

安全:必須親自體驗才能理解。Scala 集合的靜態類型和函式性質表示您可能發生的絕大多數錯誤會在編譯期間被偵測到。原因如下:(1) 集合操作本身被大量使用,因此經過完善測試。(2) 集合操作的使用將輸入和輸出明確表示為函式參數和結果。(3) 這些明確的輸入和輸出會受到靜態類型檢查。重點是絕大多數的錯誤使用會顯示為類型錯誤。一開始執行數百行的程式一點也不罕見。

快速:集合操作在函式庫中經過調整和最佳化。因此,使用集合通常相當有效率。您或許可以使用經過仔細調整的資料結構和操作獲得稍好的結果,但您也可能在過程中做出一些次佳的實作決策,導致結果更差。

平行scala-parallel-collections 模組 提供在多個核心上並行執行集合運算。平行集合通常支援與順序集合相同的運算。只要呼叫 par 方法,就可以將順序集合轉換為平行集合。

通用:集合在任何有意義的類型上提供相同的運算。因此,使用相當少的運算詞彙,就可以達成很多事。例如,字串在概念上是字元序列。因此,在 Scala 集合中,字串支援所有序列運算。陣列也是如此。

範例:以下是展示 Scala 集合許多優點的一行程式碼。

val (minors, adults) = people partition (_.age < 18)

這個運算的執行方式一目瞭然:它會根據年齡將 people 集合分割成 minorsadults。由於 partition 方法定義在根集合類型 IterableOps 中,因此此程式碼適用於任何類型的集合,包括陣列。產生的 minorsadults 集合將與 people 集合為相同的類型。

此程式碼比傳統集合處理所需的一到三個迴圈簡潔許多(陣列需要三個迴圈,因為中間結果需要暫存在其他地方)。一旦您學會基本的集合詞彙,您也會發現撰寫此程式碼比撰寫明確迴圈容易且安全許多。

此外,partition 操作相當快速,而且在多個核心上並行集合時,速度甚至可以更快。

此文件從使用者的角度深入探討 Scala 集合類別的 API。它將帶您瀏覽所有基本類別及其定義的方法。

此頁面的貢獻者