var seq = Seq[String]()
seq = seq :+ "hello"
var set = Set[String]()
set += "hello"
what's the difference between Seq and 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 のコレクション ライブラリガイドなど、多くの場所で説明されています。
それらの特徴的な機能によってそれらを説明することもできます。
ASet[A]
は関数A => Boolean
です。つまり、要素が存在するかどうかを確認できます。
ASeq[A]
は関数Int => A
です。つまり、その中の各要素にはインデックスがあり、任意のインデックスにある要素を取得できます。
これは、2 つのステートメントの違いも説明しています。
seq = seq :+ "hello"
seq = "hello" +: seq
set = set + "hello"
ではSet
、要素の順序を制御しないため、単純に要素を追加します。aSeq
では、各要素にインデックスがあるため、要素が配置されている場所に関連があるため、要素をシーケンスの先頭または末尾に追加することをそれぞれ指定する と があります+:
。:+
この質問を自問すると、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 では許可されないことです。
セットは個別の値を格納するコレクションであり、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