您的位置:首页 > 其它

Scala for Impatient - Chapter 3

2013-08-30 14:05 316 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: