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
,max
sorted
: 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
.