📅  最后修改于: 2023-12-03 15:34:50.255000             🧑  作者: Mango
Seq 是一个序列,包含一些元素。它提供了对序列中元素的访问和操作。Scala 中有三种 Seq:List、Vector 和 Range。
List 是一个不可变的序列,实现了 Seq 特质。它的底层实现是链表。可以通过以下方式创建一个 List:
val list1 = List(1, 2, 3)
val list2 = 1 :: 2 :: 3 :: Nil
List 提供了很多操作,例如:
head
:返回 List 的第一个元素。tail
:返回 List 除第一个元素以外的所有元素。isEmpty
:判断 List 是否为空。length
:返回 List 的长度。map
:将 List 中的每一个元素应用到一个函数上。filter
:过滤 List 中不符合条件的元素。foldLeft
:从 List 左侧开始应用一个函数,返回最终的结果。Vector 是一个可变的序列,实现了 Seq 特质。它的底层实现是一个实现了可持久化的数组,使用拷贝-on-write 策略进行优化。可以通过以下方式创建一个 Vector:
val vector1 = Vector(1, 2, 3)
val vector2 = Vector.empty[Int]
Vector 提供了与 List 类似的操作,例如:
head
:返回 Vector 的第一个元素。tail
:返回 Vector 除第一个元素以外的所有元素。isEmpty
:判断 Vector 是否为空。length
:返回 Vector 的长度。map
:将 Vector 中的每一个元素应用到一个函数上。filter
:过滤 Vector 中不符合条件的元素。foldLeft
:从 Vector 左侧开始应用一个函数,返回最终的结果。除此之外,Vector 还提供了一些独有的操作,例如:
+
:在 Vector 的尾部添加一个元素。++
:将另一个 Vector 中的元素添加到当前 Vector 的尾部。updated
:将 Vector 中指定位置的元素替换成另一个元素。Range 是一个不可变的序列,实现了 Seq 特质。它表示一个数值区间,并提供了一些操作。可以通过以下方式创建一个 Range:
val range1 = 1 to 10
val range2 = 1 until 10
Range 提供了以下操作:
head
:返回 Range 的第一个元素。tail
:返回 Range 除第一个元素以外的所有元素。isEmpty
:判断 Range 是否为空。length
:返回 Range 的长度。map
:将 Range 中的每一个元素应用到一个函数上。filter
:过滤 Range 中不符合条件的元素。foldLeft
:从 Range 左侧开始应用一个函数,返回最终的结果。此外,Range 还提供了一些独有的操作,例如:
by
:指定步长。contains
:判断指定值是否在 Range 中。foreach
:将指定函数应用到 Range 中的每一个元素上。Scala Seq 提供了对序列中元素的访问和操作,包括 List、Vector 和 Range。List 是一个不可变的链表,Vector 是一个可变的数组,Range 是一个表示数值区间的不可变序列。它们都实现了 Seq 特质,因此具有类似的操作,如 head、tail、isEmpty、length、map、filter 和 foldLeft 等。Vector 和 Range 还提供了一些 List 中没有的独有操作。选择使用哪种 Seq 取决于具体的应用场景。