var seq = Seq[String]()
seq = seq :+ "hello"
var set = Set[String]()
set += "hello"
Seq 和 Set 有什么区别?
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
。
这在很多地方都有描述,例如Seq和Set的文档以及Scala 的 Collection Library指南。
也可以通过它们的特征功能来描述它们:
ASet[A]
是一个函数A => Boolean
,这意味着可以检查一个元素是否存在于其上。
ASeq[A]
是一个函数Int => A
,这意味着其中的每个元素都有一个索引,并且可以检索位于任何给定索引处的元素。
这也解释了两种说法的区别:
seq = seq :+ "hello"
seq = "hello" +: seq
set = set + "hello"
在 aSet
上,不控制元素的顺序,因此您只需向其中添加元素。在 a 上Seq
,因为每个元素都有一个索引,所以它与放置元素的位置相关,因此我们有+:
和:+
,它们分别指定一个元素将被添加到序列之前或附加到序列中。
问自己这个问题,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 不允许。
集合是一个集合,您可以在其中存储不同的值,而 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