In Scala, array indices are zero-based. To index in an array, use () instead of [] in Java:
val arr = Array(1, 2, 3)
val one = arr(0)
Fixed-length Arrays
Array: It is implemented as a Java array, so the memory is initialized to zero or null.
val nums = Array[Int](10)
Variable-length Arrays
ArrayBuffer: Scala’s equivalency of ArrayList:
val b = ArrayBuffer[Int]()
b += 1, b += (1, 2, 3, 4) are used to append elements at the end. If multiple elements are added, enclose them in parentheses.
b ++= Array(1, 2, 3) are used to append collection to b.
elem +=: b prepend b with elem. coll ++=: b prepend coll to b.
buff -- buff2 remove all elements in buff2 from buff.
b.toArray() and a.toBuffer() can convert between Array and ArrayBuffer.
Array Traversal
Scala offers more uniform way to traverse Array and ArrayBuffer. In a for loop:
for (i <- 0 until a.length)
println(a(i))
until constructs a Range up to the upper bound (exclusive). You can also use to, which is inclusive.
To visit every other element, use 0 until (a.length, 2). To visit elements in reverse order, use (0 until a.length).reverse.
If you don’t need to access the index, visit the elements directly:
for (elem <- a)
println(elem)
Array Transformation
Apply a certain transformation to all elements or some elements in array: use for ... yield:
val result = for (elem <- a if elem % 3 == 0) yield 2 * elem
It creates a new collection of the same type with results, and the original collection is not affected. Use guard if necessary. It is the same as
a.filter(_ % 3 == 0).map(_ * 2)
a filter {_ % 3 == 0} map {_ * 2}
It’s just a matter of style.
Common methods
sum,min,maxsorted: sort results into a new collection without modifying the original one.sortWith()works with a comparison function.quickSort(a)sort an array in place.a.mkString()joins elements in array and ArrayBuffer with provided string.toString()on array is useless.
Multidimensional Arrays
val matrix = Array.ofDim[Double](3, 5) creates a 3-row, 5-column matrix. ofDim can create up to 5 dimensional arrays.
To access an element, use multiple pairs of parentheses:
matrix(row)(col) = 42.