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