ArrayBuffer, Part 2

ArrayBuffer, Part 2: Updating and Deleting Elements

The Scala ArrayBuffer is mutable, and this video shows a few common ways to update and delete elements in an ArrayBuffer.

How to update ArrayBuffer elements

This section shows examples of how to update ArrayBuffer elements.

Updating existing elements:

val a = (1 to 4).toBuffer             // ArrayBuffer(1, 2, 3, 4)
a(2) = 50                             // ArrayBuffer(1, 2, 50, 4)
a.update(0, 10)                       // ArrayBuffer(10, 2, 50, 4)
a.update(3, 40)                       // ArrayBuffer(10, 2, 50, 40)

Appending, prepending, and inserting

Update can also mean append, so here are a few ways to append elements with += and ++=:

val nums = ArrayBuffer(1, 2, 3)   # ArrayBuffer(1, 2, 3)
nums += 4                         # ArrayBuffer(1, 2, 3, 4)
nums += (5, 6)                    # ArrayBuffer(1, 2, 3, 4, 5, 6)
nums ++= List(7, 8)               # ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8)

With appending, inserting, and prepending you can use symbolic method names, or names like these:

  • append, appendAll
  • insert, insertAll
  • prepend, prependAll

The symbolic names are typically aliases for named methods like these.

More examples:

val a = ArrayBuffer(1, 2, 3)      // ArrayBuffer(1, 2, 3)
a.append(4)                       // ArrayBuffer(1, 2, 3, 4)
a.appendAll(Seq(5, 6))            // ArrayBuffer(1, 2, 3, 4, 5, 6)

a.clear                           // ArrayBuffer()

val a = ArrayBuffer(9, 10)        // ArrayBuffer(9, 10)
a.insert(0, 8)                    // ArrayBuffer(8, 9, 10)
a.insertAll(0, Vector(6, 7))      // ArrayBuffer(6, 7, 8, 9, 10)
a.prepend(5)                      // ArrayBuffer(5, 6, 7, 8, 9, 10)
a.prependAll(Seq(1,2,3,4))        // ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

Updating in place

Because ArrayBuffer is mutable, you can update its elements in place:

// an example ArrayBuffer:
val a = ArrayBuffer.tabulate(10)(i => i + 1)  // a: ArrayBuffer(1 .. 10)

a.dropInPlace(1)             // ArrayBuffer(2, 3, 4, 5, 6, 7, 8, 9, 10)
a.dropRightInPlace(1)        // ArrayBuffer(2, 3, 4, 5, 6, 7, 8, 9)
a.dropWhileInPlace(_ < 4)    // ArrayBuffer(4, 5, 6, 7, 8, 9)
a.filterInPlace(_ > 4)       // ArrayBuffer(5, 6, 7, 8, 9)
a.mapInPlace(_ * 10)         // ArrayBuffer(50, 60, 70, 80, 90)
a.takeInPlace(4)             // ArrayBuffer(50, 60, 70, 80)
a.takeRightInPlace(3)        // ArrayBuffer(60, 70, 80)
a.takeWhileInPlace(_ < 80)   // ArrayBuffer(60, 70)

Deleting ArrayBuffer elements

Use methods and approaches like these to delete ArrayBuffer elements:

// -= and --=

val a = ArrayBuffer.range('a', 'h')   // ArrayBuffer(a, b, c, d, e, f, g)
a -= 'a'                              // ArrayBuffer(b, c, d, e, f, g)
a --= Seq('b', 'c')                   // ArrayBuffer(d, e, f, g)
a --= Set('d')                        // ArrayBuffer(e, f, g)


// remove

val a = ArrayBuffer.range('a', 'h')   // ArrayBuffer(a, b, c, d, e, f, g)
a.remove(0)                           // ArrayBuffer(b, c, d, e, f, g)
a.remove(2, 3)                        // ArrayBuffer(b, c, g)


// trimStart and trimEnd

val a = ArrayBuffer.range('a', 'h')   // ArrayBuffer(a, b, c, d, e, f, g)
a.trimStart(2)                        // ArrayBuffer(c, d, e, f, g)
a.trimEnd(2)                          // ArrayBuffer(c, d, e)


// clear

val a = ArrayBuffer.range('a', 'h')   // ArrayBuffer(a, b, c, d, e, f, g)
a.clear                               // ArrayBuffer[Char] = ArrayBuffer()

More details

For MANY more details and examples, see: