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

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

what's the difference between Seq and 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 のコレクション ライブラリガイドなど、多くの場所で説明されています。

それらの特徴的な機能によってそれらを説明することもできます。

  • ASet[A]は関数A => Booleanです。つまり、要素が存在するかどうかを確認できます。

  • ASeq[A]は関数Int => Aです。つまり、その中の各要素にはインデックスがあり、任意のインデックスにある要素を取得できます。

これは、2 つのステートメントの違いも説明しています。

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

set = set + "hello"

ではSet、要素の順序を制御しないため、単純に要素を追加します。aSeqでは、各要素にインデックスがあるため、要素が配置されている場所に関連があるため、要素をシーケンスの先頭または末尾に追加することをそれぞれ指定する と があります+::+

于 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)

顕著な違いの 1 つは、Seq では重複が許可されるのに対し、Set では許可されないことです。

于 2014-05-28T21:31:54.453 に答える
0

セットは個別の値を格納するコレクションであり、seq はコレクションのより一般化されたバージョンであり、Array、List などのよく使用されるコレクションの共通のスーパークラスです。

あなたの例では:

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

セットには「こんにちは」が含まれています

set += "hello"

-> セットは変更されません。

詳細については、set の API を参照してください: http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Set

于 2013-11-06T02:59:54.123 に答える