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 -
map
,flatMap
和collect
通過將函式應用於原始集合中的每個元素來生成新集合。
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")
- 轉換 -
toList
,toArray
和許多其他轉換操作將當前集合更改為更具體的集合。這些通常是字首為’to’的方法和更具體的型別(即’toList’轉換為List
)。
val array: Array[Int] = List[Int](1, 2, 3).toArray // convert list of ints to array of ints
- 大小資訊 -
isEmpty
,nonEmpty
,size
和hasDefiniteSize
都是有關該集的後設資料。這允許對集合進行條件操作,或者允許程式碼確定集合的大小,包括它是無限的還是離散的。
List().isEmpty // true
List(1).nonEmpty // true
val list = List(1, 2, 3)
list.head // = 1
list.last // = 3
- 子集合檢索操作 -
filter
,tail
,slice
,drop
和其他操作允許選擇集合的一部分以進一步操作。
List(-2, -1, 0, 1, 2).filter(num => num > 0) // = List(1, 2)
- 細分操作 -
partition
,splitAt
,span
和groupBy
將當前集合分成不同的部分。
// split numbers into < 0 and >= 0
List(-2, -1, 0, 1, 2).partition(num => num < 0) // = (List(-2, -1), List(0, 1, 2))
- 元素測試 -
exists
,forall
和count
是用於檢查此集合以檢視它是否滿足謂詞的操作。
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
- 摺疊 -
foldLeft
(/:
),foldRight
(:\
),reduceLeft
和reduceRight
用於將二進位制函式應用於集合中的連續元素。轉到此處獲取摺疊示例並轉到此處以獲取縮減示例 。