セット(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)
ミュータブルなセットだから、ちゃんと変更されているのがわかる。