Scala 集合簡介

據其作者稱 ,Scala Collections 框架易於使用,簡潔,安全,快速且通用。

該框架由 Scala 特徵組成 ,這些特徵旨在構建用於建立集合的塊。有關這些構建塊的更多資訊,請閱讀官方 Scala 集合概述

這些內建集合分為不可變和可變包。預設情況下,使用不可變版本。構造 List()(不匯入任何東西)將構造一個不可變列表。

該框架最強大的功能之一是在志同道合的集合中提供一致且易於使用的介面。例如,對於列表,集合,向量,序列和陣列,對集合中的所有元素求和是相同的:

val numList = List[Int](1, 2, 3, 4, 5)
numList.reduce((n1, n2) => n1 + n2)  // 15

val numSet = Set[Int](1, 2, 3, 4, 5)
numSet.reduce((n1, n2) => n1 + n2)   // 15

val numArray = Array[Int](1, 2, 3, 4, 5)
numArray.reduce((n1, n2) => n1 + n2) // 15

這些志趣相投的型別繼承自 Traversable 特質。

現在使用 Vector 而不是 List 是最佳實踐,因為實現具有更好的效能可以在此處找到效能特徵Vector 可以在任何使用 List 的地方使用。

可穿越的型別

具有 Traversable 特性的集合類實現了 foreach 並且繼承了許多用於對集合執行常見操作的方法,這些方法都具有相同的功能。這裡列出了最常見的操作:

  • Map - mapflatMapcollect 通過將函式應用於原始集合中的每個元素來生成新集合。
List(1, 2, 3).map(num => num * 2) // double every number = List(2, 4, 6)

// split list of letters into individual strings and put them into the same list
List("a b c", "d e").flatMap(letters => letters.split(" ")) // = List("a", "b", "c", "d", "e")
  • 轉換 - toListtoArray 和許多其他轉換操作將當前集合更改為更具體的集合。這些通常是字首為’to’的方法和更具體的型別(即’toList’轉換為 List)。
val array: Array[Int] = List[Int](1, 2, 3).toArray // convert list of ints to array of ints
  • 大小資訊 - isEmptynonEmptysizehasDefiniteSize 都是有關該集的後設資料。這允許對集合進行條件操作,或者允許程式碼確定集合的大小,包括它是無限的還是離散的。
List().isEmpty // true
List(1).nonEmpty // true
  • 元素檢索 - headlastfind 及其 Option變體用於檢索第一個或最後一個元素,或查詢集合中的特定元素。
val list = List(1, 2, 3)
list.head // = 1
list.last // = 3
  • 子集合檢索操作 - filtertailslicedrop 和其他操作允許選擇集合的一部分以進一步操作。
List(-2, -1, 0, 1, 2).filter(num => num > 0) // = List(1, 2)
  • 細分操作 - partitionsplitAtspangroupBy 將當前集合分成不同的部分。
// split numbers into < 0 and >= 0
List(-2, -1, 0, 1, 2).partition(num => num < 0) // = (List(-2, -1), List(0, 1, 2))
  • 元素測試 - existsforallcount 是用於檢查此集合以檢視它是否滿足謂詞的操作。
List(1, 2, 3, 4).forall(num => num > 0) // = true, all numbers are positive
List(-3, -2, -1, 1).forall(num => num < 0) // = false, not all numbers are negative