集合(Scala 2.8 - 2.12)

可遍历特征

语言

在集合层次结构的顶部是特征 Traversable。其唯一的抽象操作是 foreach

def foreach[U](f: Elem => U)

实现 Traversable 的集合类只需要定义此方法;所有其他方法都可以从 Traversable 继承。

foreach 方法旨在遍历集合的所有元素,并将给定的操作 f 应用于每个元素。操作的类型是 Elem => U,其中 Elem 是集合元素的类型,U 是任意结果类型。调用 f 仅是为了产生副作用;事实上,f 的任何函数结果都会被 foreach 丢弃。

Traversable 还定义了许多具体方法,所有这些方法都列在下面的表格中。这些方法分为以下几类

  • 加法++,将两个可遍历对象连接在一起,或将迭代器的所有元素连接到可遍历对象。
  • 映射操作 mapflatMapcollect,通过对集合元素应用一些函数来生成一个新集合。
  • 转换 toArraytoListtoIterabletoSeqtoIndexedSeqtoStreamtoSettoMap,将 Traversable 集合转换为更具体的内容。如果集合的运行时类型已与所需集合类型匹配,则所有这些转换都会返回其接收者参数不变。例如,将 toList 应用于列表将生成列表本身。
  • 复制操作 copyToBuffercopyToArray。顾名思义,这些操作分别将集合元素复制到缓冲区或数组中。
  • 大小信息操作 isEmptynonEmptysizehasDefiniteSize:可遍历集合可以是有限的或无限的。无限可遍历集合的一个示例是自然数流 Stream.from(0)。方法 hasDefiniteSize 指示集合是否可能无限。如果 hasDefiniteSize 返回 true,则集合肯定有限。如果它返回 false,则集合尚未完全展开,因此可能是无限的或有限的。
  • 元素检索操作 headlastheadOptionlastOptionfind。这些操作选择集合中的第一个或最后一个元素,或者选择满足条件的第一个元素。但是,请注意,并非所有集合都对“第一个”和“最后一个”的含义有明确的定义。例如,哈希集可能会根据元素的哈希键存储元素,这些键可能会在每次运行时发生变化。在这种情况下,哈希集的“第一个”元素对于程序的每次运行也可能不同。如果集合始终以相同的顺序生成其元素,则该集合为有序集合。大多数集合是有序的,但有些集合(例如哈希集)不是有序的——放弃顺序会带来一些额外的效率。顺序通常对于提供可重复的测试和帮助调试至关重要。这就是 Scala 集合为所有集合类型提供有序备选方案的原因。例如,HashSet 的有序备选方案是 LinkedHashSet
  • 子集合检索操作 tailinitslicetakedroptakeWhiledropWhilefilterfilterNotwithFilter。这些操作都返回由索引范围或某个谓词标识的某个子集合。
  • 细分操作 splitAtspanpartitiongroupBy,这些操作将此集合的元素拆分为多个子集合。
  • 元素测试 existsforallcount,这些操作使用给定的谓词测试集合元素。
  • 折叠 foldLeftfoldRight/::\reduceLeftreduceRight,这些操作对连续的元素应用二元运算。
  • 特定折叠 sumproductminmax,这些操作处理特定类型(数字或可比较类型)的集合。
  • 字符串操作 mkStringaddStringstringPrefix,这些操作提供了将集合转换为字符串的备选方法。
  • 视图操作,由 view 方法的两个重载变体组成。视图是一个延迟求值的集合。您将在 稍后 了解更多有关视图的信息。

Traversable 类中的操作

它是什么 它做什么
抽象方法  
xs foreach f xs 的每个元素执行函数 f
添加  
xs ++ ys 一个集合,由 xsys 的元素组成。 ys 是一个 TraversableOnce 集合,即 TraversableIterator
映射  
xs map f 从将函数 f 应用到 xs 中的每个元素而获得的集合。
xs flatMap f 从将基于集合的函数 f 应用到 xs 中的每个元素并连接结果而获得的集合。
xs collect f 从将部分函数 f 应用到 xs 中的每个已定义元素并收集结果而获得的集合。
转换  
xs.toArray 将集合转换为数组。
xs.toList 将集合转换为列表。
xs.toIterable 将集合转换为可迭代对象。
xs.toSeq 将集合转换为序列。
xs.toIndexedSeq 将集合转换为索引序列。
xs.toStream 将集合转换为延迟计算的流。
xs.toSet 将集合转换为集合。
xs.toMap 将键/值对集合转换为映射。如果集合不包含对作为元素,则调用此操作会导致静态类型错误。
复制  
xs copyToBuffer buf 将集合的所有元素复制到缓冲区 buf
xs copyToArray(arr, s, n) 将集合中最多 n 个元素复制到从索引 s 开始的数组 arr 中。最后两个参数是可选的。
尺寸信息  
xs.isEmpty 测试集合是否为空。
xs.nonEmpty 测试集合是否包含元素。
xs.size 集合中的元素数量。
xs.hasDefiniteSize 如果已知xs具有有限大小,则为 True。
元素检索  
xs.head 集合的第一个元素(或某些元素,如果未定义顺序)。
xs.headOption xs的第一个元素(以选项值形式),如果xs为空,则为 None。
xs.last 集合的最后一个元素(或某些元素,如果未定义顺序)。
xs.lastOption xs的最后一个元素(以选项值形式),如果xs为空,则为 None。
xs find p 一个选项,其中包含xs中第一个满足p的元素,或者如果没有任何元素符合条件,则包含None
子集合  
xs.tail 集合的其余部分,除了xs.head
xs.init 集合的其余部分,除了xs.last
xs slice (from, to) 一个集合,其中包含xs的某个索引范围内的元素(从from开始,到to结束,但不包括to)。
xs take n 一个集合,其中包含xs的前n个元素(或某些任意n个元素,如果未定义顺序)。
xs drop n 集合的其余部分,除了xs take n
xs takeWhile p 集合中元素的最长前缀,所有元素都满足p
xs dropWhile p 集合,其中不包含最长前缀,所有元素都满足p
xs filter p 集合,其中包含满足谓词p的那些 xs 元素。
xs withFilter p 此集合的非严格筛选器。对 mapflatMapforeachwithFilter 的后续调用仅适用于条件 p 为真时 xs 的那些元素。
xs filterNot p xs 中不满足谓词 p 的那些元素组成的集合。
细分  
xs splitAt n 在某个位置拆分 xs,得到集合对 (xs take n, xs drop n)
xs span p 根据谓词拆分 xs,得到集合对 (xs takeWhile p, xs.dropWhile p)
xs partition p xs 拆分为一对集合;一个包含满足谓词 p 的元素,另一个包含不满足谓词的元素,得到集合对 (xs filter p, xs.filterNot p)
xs groupBy f 根据判别函数 fxs 分区到集合映射中。
元素条件  
xs forall p 一个布尔值,指示谓词 p 是否适用于 xs 的所有元素。
xs exists p 一个布尔值,指示谓词 p 是否适用于 xs 中的某个元素。
xs count p 满足谓词 pxs 中的元素数量。
折叠  
(z /: xs)(op) xs 的连续元素之间应用二元运算 op,从左到右,从 z 开始。
(xs :\ z)(op) xs 的连续元素之间应用二元运算 op,从右到左,从 z 开始。
xs.foldLeft(z)(op) (z /: xs)(op) 相同。
xs.foldRight(z)(op) (xs :\ z)(op) 相同。
xs reduceLeft op 对非空集合 xs 的连续元素应用二元运算 op,从左到右。
xs reduceRight op 对非空集合 xs 的连续元素应用二元运算 op,从右到左。
特定折叠  
xs.sum 集合 xs 的数值元素值的总和。
xs.product 集合 xs 的数值元素值的乘积。
xs.min 集合 xs 的有序元素值的最小值。
xs.max 集合 xs 的有序元素值的最大值。
字符串  
xs addString (b, start, sep, end) 将字符串添加到 StringBuilder b 中,该字符串显示 xs 的所有元素,它们位于分隔符 sep 之间,并用字符串 startend 括起来。 startsepend 均为可选。
xs mkString (start, sep, end) 将集合转换为字符串,该字符串显示 xs 的所有元素,它们位于分隔符 sep 之间,并用字符串 startend 括起来。 startsepend 均为可选。
xs.stringPrefix xs.toString 返回的字符串开头处的集合名称。
视图  
xs.view 生成 xs 的视图。
xs 视图 (from, to) 生成一个视图,表示 xs 的某个索引范围内的元素。

此页面的贡献者