Scala for Impatient - Chapter 3
Work with Arrays
Fixed-Length Arrays
如果是数组长度不可变,就直接使用Array类型。在JVM中, scala的Array实际上就对应着Java中的Array
val nums = new Array[Int](10)
val a = Array[String](10)
val s = Array("Hello", "world")
s(0) "Goodbye" // use () instead of [] to access elements
Variable-Length Arrays: Array Buffers
scala中的ArrayBuffer,就相当于java中的ArrayList。
下面这个例子中,不要奇怪是一个加号还是两个加号, 这不是运算符,而是ArrayBuffer的方法,具体参考scaladoc
import scala.collection.mutable.ArrayBuffer val b = new ArrayBuffer[Int]() b += 1 // (1) b += (1, 2, 3, 4) // (1, 1, 2, 3, 4) b ++= ArrayBuffer(1, 2, 3, 4) // (1, 1, 2, 3, 4, 1, 2, 3, 4) b.trimEnd(5) // (1, 1, 2, 3)
ArrayBuffer在末尾操作是效率最高的, 在中间添加或删除,都将导致其后的所有元素移动
ArrayBuffer.toArray => convert ArrayBuffer to Array
Array.toBuffer => convert Array to ArrayBuffer
Traversing Arrays and Array Buffers
scala中这两者的操作方式基本相同
for ( i <- 0 until array.length)
println(i + ":" + array(i))
倒序遍历
for ( i <- (0 until array.length).reverse)
println(i + ":" + array(i))
如果不需要index
for ( a <- array)
println(a)
Transforming Arrays
这里transform的意思就是指filter/map/select/each这种比较FP的写法
a filter { _ % 2 == 0} map { 2 * _ }
Common Algorithms
scala提供了一些buildin functions来方便对array的操作
Array(1, 2, 7, 9).sum
// 19
// works for ArrayBuffer too
ArrayBuffer("Mary", "had", "a", "little", "lamb").max
// "little"
val b = ArrayBuffer(1, 7, 2, 9)
val bSorted = b.sorted
// b is unchanged, bSorted is ArrayBuffer(1, 2, 7, 9)
val bDescending = b.sortWith(_ > _)
// ArrayBuffer(9, 7, 2, 1)
Multidimentional Arrays
声明是,需要用ofDim
val matrix = Array.ofDim[Double](3, 4)
访问时, 用两个括号
matrix(row)(column) = 42
Interoperating with Java
import scala.collection.JavaConversions

浙公网安备 33010602011771号