Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在Scala中,Seq和Set的区别是什么_Scala_Set_Seq - Fatal编程技术网

什么';在Scala中,Seq和Set的区别是什么

什么';在Scala中,Seq和Set的区别是什么,scala,set,seq,Scala,Set,Seq,Seq和Set之间有什么区别?Set是一个集合,您可以在其中存储不同的值,而Seq是集合的更一般化版本,它是一些常用集合(如数组、列表等)的公共超类 在您的示例中: var seq = Seq[String]() seq = seq :+ "hello" var set = Set[String]() set += "hello" 集合包含“hello” ->设置保持不变 欲了解更多信息,请参阅api手册:Seq 序列始终具有定义的元素顺序。序列提供了一种用于索引的方法 Seq类似于jav

Seq和Set之间有什么区别?

Set是一个集合,您可以在其中存储不同的值,而Seq是集合的更一般化版本,它是一些常用集合(如数组、列表等)的公共超类

在您的示例中:

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

var set = Set[String]()
set += "hello"
集合包含“hello”

->设置保持不变

欲了解更多信息,请参阅api手册:

Seq

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

Seq
类似于
java.util.List

设置

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

这与数学意义上的“集合”非常相似:


Set
类似于
java.util.Set

这在许多地方都有描述,例如和和指南的文档

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

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

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

这也解释了两种说法之间的差异:

set += "hello"

集合
上,无法控制元素的顺序,因此只需向其中添加元素即可。在
Seq
上,因为每个元素都有一个索引,所以它与元素的放置位置相关,因此我们有
+:
:+
,它们分别指定一个元素要在序列的前面或后面添加。

问自己这个问题,Scala工作表给出了答案:

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

set = set + "hello"
一个明显的区别是Seq允许重复,而Set不允许

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

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