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
用于将二进制函数应用于集合中的连续元素。转到此处获取折叠示例并转到此处以获取缩减示例 。