セット

セット(Set)は集合を表すデータ構造だ。次のようにして作ることができる。

scala> val s = Set(1, 1, 2, 3, 3, 3, 4, 5)
s: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)

コンストラクタの引数には 1 や 3 が重複しているけど、返ってきた値ではこの重複が取り除かれている。このようにセットは値の重複を許さない。あと、たぶん順番もないのだと思う。

セットにもイミュータブルなセットとミュータブルなセットがある。

イミュータブルなセット

上のように、単に Set(…) として作ったセットはイミュータブルなセット(scala.collection.immutable.Set)だ。要素を取り除いてみると

scala> s - 5
res4: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)

一見取り除かれるように見けるけど、これは新しい値が返ってきているだけで、元の s は変わっていない。

scala> s
res5: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)

ミュータブルなセット

ミュータブルなセット(scala.collection.mutable.Set)を作るには次のようにする。

scala> import scala.collection.mutable
import scala.collection.mutable

scala> val s2 = mutable.Set(1, 2, 3, 4, 5)
s2: scala.collection.mutable.Set[Int] = Set(1, 5, 2, 3, 4)

ここから 5 を取り除いてみよう。

scala> s2 -= 5
res7: s2.type = Set(1, 2, 3, 4)

scala> s2
res8: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)

ミュータブルなセットだから、ちゃんと変更されているのがわかる。