6
var seq = Seq[String]()
seq = seq :+ "hello"

var set = Set[String]()
set += "hello"

Seq 和 Set 有什么区别?

4

4 回答 4

9

序列

http://www.scala-lang.org/api/current/scala/collection/Seq.html

序列始终具有定义的元素顺序。序列提供了一种用于索引的方法。

Seq类似于java.util.List

http://www.scala-lang.org/api/current/scala/collection/Set.html

集合是不包含重复元素的集合。

这非常类似于数学意义上的“集合”:http://en.wikipedia.org/wiki/Set_(mathematics)

Set类似于java.util.Set

于 2013-11-06T03:00:16.630 回答
7

这在很多地方都有描述,例如SeqSet的文档以及Scala 的 Collection Library指南。

也可以通过它们的特征功能来描述它们:

  • ASet[A]是一个函数A => Boolean,这意味着可以检查一个元素是否存在于其上。

  • ASeq[A]是一个函数Int => A,这意味着其中的每个元素都有一个索引,并且可以检索位于任何给定索引处的元素。

这也解释了两种说法的区别:

seq = seq :+ "hello"
seq = "hello" +: seq 

set = set + "hello"

在 aSet上,不控制元素的顺序,因此您只需向其中添加元素。在 a 上Seq,因为每个元素都有一个索引,所以它与放置元素的位置相关,因此我们有+::+,它们分别指定一个元素将被添加到序列之前或附加到序列中。

于 2013-11-06T03:04:10.877 回答
2

问自己这个问题,Scala 工作表提供了答案:

val seq = Seq(1,1)                   //> seq  : Seq[Int] = List(1, 1)
val set = Set(1,1)                   //> set  : scala.collection.immutable.Set[Int] = Set(1)

一个明显的区别是 Seq 允许重复,而 Set 不允许。

于 2014-05-28T21:31:54.453 回答
0

集合是一个集合,您可以在其中存储不同的值,而 seq 是集合的更通用版本,它是一些常用集合(如 Array、List 等)的通用超类。

在你的例子中:

var set = Set[String]()
set += "hello"

集包含“你好”

set += "hello"

-> 设置保持不变。

欲了解更多信息,请参阅集上的 api:http ://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Set

于 2013-11-06T02:59:54.123 回答