數(shù)組是最基本的數(shù)據(jù)結(jié)構(gòu)。通常的語法或數(shù)據(jù)結(jié)構(gòu)書都會(huì)先介紹數(shù)組,而后再介紹集合,鏈表,樹,哈希表等等。我們也不例外。
定長數(shù)組
最簡單的數(shù)組創(chuàng)建如下,記住方括號(hào)在Scala中用做泛型,相當(dāng)于<>在Java中作用。
val nums = new Array[Int](10)
// 10個(gè)Integer的數(shù)組,初始值為零。
更簡潔的數(shù)組創(chuàng)建像這樣:
val s = Array("Hello", "World")
省略new的初始化,并且利用類型推斷,無需指明類型。
數(shù)組元素的訪問使用()。
s(0) = "Goodbye"
s不是val嗎?為什么可以改變呢?s這里存的是一個(gè)數(shù)組的reference,reference不能變,但是其內(nèi)容是可以改變的。另外說一句,遺憾的是,從C時(shí)代開始,Index從0開始這一違反人類正常思維的“習(xí)慣”一直沿用。
變長數(shù)組
Scala中的ArrayBuffer和Java中的ArrayList類似,長度可以改變。
import scala.collection.mutable.ArrayBuffer //注意到,ArrayBuffer在mutable的包中
val b = ArrayBuffer[Int]()
b += 1 //加元素
b += (1, 2, 3, 5) //加數(shù)組
數(shù)組遍歷
可以使用Index
for (i <- 0 until a.length)
println(i + ": " + a(i))
也可以不用
for (elem <- a) println(elem)
要強(qiáng)調(diào)的是,對(duì)一個(gè)數(shù)組(或者其他集合)進(jìn)行遍歷以一種命令式的編程(imperative programming)。在Scala中,我們往往避免使用,而是使用函數(shù)式的方法。強(qiáng)調(diào)“做什么”而不是怎么做。以后還會(huì)遇到很多例子,你會(huì)逐步感受到它們的區(qū)別。
通用算法
Scala提供了很多內(nèi)建通用算法,作用于數(shù)組,以及以后會(huì)談到的其他數(shù)據(jù)類型如集合。比如sum,count,max,mKString等等。mKString是一個(gè)很使用的方法。參見下面的例子。
Array(1, 2, 3).sum // 6
ArrayBuffer(1, 2, 3).max // 3
val a = Array(1, 10, 2, 9)
scala.util.Sorting.quickSort(a) // 現(xiàn)在a變成了 Array(1, 2, 9, 10)
a.mkString(" and ")
// "1 and 2 and 9 and 10"