リストバッファ
ListBuffer は mutable (変更可能) な List。
頻繁に追加、変更する場合は List だと新規に List を作成し直すため処理効率が
低下するので、そんな場合に ListBuffer を使用します。
ただし Scala は ListBuffer を暗黙には import していないので、使用するときは、scala.collection.mutable.ListBuffer を import しないと使えません。*1
scala> val foo = ListBuffer(1,2,3,4,5) <console>:7: error: not found: value ListBuffer val foo = ListBuffer(1,2,3,4,5) ^ scala> import scala.collection.mutable.ListBuffer import scala.collection.mutable.ListBuffer scala> val foo = ListBuffer(1,2,3,4,5) foo: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 5)
末尾に要素を追加する場合は + で追加。戻り値で追加後の ListBuffer を返します。
戻り値が不要な場合は += で要素を追加します。
scala> foo += 6 res0: foo.type = ListBuffer(1, 2, 3, 4, 5, 6)
要素の参照は List と同じで ListBufferオブジェクトに (..) で添字を指定します。
scala> foo(5) res1: Int = 6
先頭に要素を追加する場合は +: で右側に追加先のListBufferのオブジェクトを指定し、+: の左側に追加要素を指定します。
scala> 0 +: foo res2: scala.collection.mutable.ListBuffer[Int] = ListBuffer(0, 1, 2, 3, 4, 5, 6)
foo の先頭に要素を追加するには +=: を使用します。
scala> 0 +=: foo res3: foo.type = ListBuffer(0, 1, 2, 3, 4, 5, 6)
List を末尾に追加する場合は ++= を使用します。
scala> foo ++= List(7,8,9) res4: foo.type = ListBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
append は += と同じように末尾に要素を追加します。
scala> foo.append(11, 12) scala> foo.toList res5: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
prepend は +=: と同じように先頭に要素を追加します。
scala> foo.prepend(-2, -1) scala> foo.toList res6: List[Int] = List(-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
List を先頭に追加する場合は ++=: を使用します。
scala> List(-4, -3) ++=: foo res7: foo.type = ListBuffer(-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
更新は、更新する添字を foo (..) に指定して = の後に変更する要素を指定します。
scala> foo(0) = 100 scala> foo.toList res8: List[Int] = List(100, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
ListBuffer へ要素を追加するときは先頭でも末尾でも一定時間で処理してくれます。
*1:たぶん副作用のないプログラミングを推奨しているためでしょう。