scala中的數(shù)組比java的數(shù)組強(qiáng)大很多
1、定長數(shù)組:長度不變的數(shù)組Array,如:聲明一個長度為10的整形數(shù)組,val arr = Array[Int](10);聲明并初始化一個字符串?dāng)?shù)組: val arrStr = Array(“wo”,”cha”,”yo”)。訪問數(shù)組方式:訪問arrStr第一個元素,arrStr(1)即可
2、變長數(shù)組(即數(shù)組緩沖):java中有ArrayList和scala中的ArrayBuffer等效;但是ArrayBuffer更加強(qiáng)大,通過下面的事列來熟悉ArrayBuffer:
import collection.mutable.ArrayBuffer
val arrbuff1 = ArrayBuffer[Int]()
val arrBuff2 = ArrayBuffer(1,3,4,-1,-4)
arrbuff1 += 23 //用+=在尾端添加元素
arrbuff1 += (2,3,4,32) //同時在尾端添加多個元素
arrbuff1 ++= arrBuff2 //可以用 ++=操作符追加任何集合
arrbuff1 ++= Array(2,43,88,66)
arrbuff1.trimEnd(2) //移除最后的2個元素
arrbuff1.remove(2) //移除arr(2+1)個元素
arrbuff1.remove(2,4) //從第三個元素開始移除4個元素
val arr = arrbuff1.toArray //將數(shù)組緩沖轉(zhuǎn)換為Array
val arrbuff2 = arr.toBuffer //將Array轉(zhuǎn)換為數(shù)組緩沖
3、遍歷數(shù)組和數(shù)組緩沖:在java中數(shù)組和數(shù)組列表/向量上語法有些不同。scala則更加統(tǒng)一,通常情況,我們可以用相同的代碼處理這兩種數(shù)據(jù)結(jié)構(gòu),for(…) yield 循環(huán)創(chuàng)建一個類型和原集合類型相同的新集合。for循環(huán)中還可以帶守衛(wèi):在for中用if來實現(xiàn)。
for(i <- 0 until arrbuff1.length) yield arrbuff1(i) * 2 //將得到ArrayBuffer(2,6,4,-2,-4)
for(i <- 0 until (arrbuff1.length,2)) yield arrbuff1(i) * 2 //將得到ArrayBuffer(12,-4)
for(elem <-0 arrbuff1) print(elem) //如果不需要使用下標(biāo),用這種方式最簡單了
for(i <- arrbuff1 if arrbuff1 > 0) print i //打印出arrbuff1中為整數(shù)的值
arrbuff1.filter( _ > 0).map{ 2 * _} //生成arrbuff1中的正數(shù)的兩倍的新集合
arrbuff1.filter {_ > 0} map {2 * _} //另一種寫法
4、常用算法:scala有很多便捷內(nèi)建函數(shù),如
arrbuff1.sum //對arrbuff1元素求和
Array("asd","sdf","ss").max //求最大元素
arrbuff1.sorted(_ < _) //將arrbuff1元素從小到大排序
arrbuff1.sorted(_ > _) //從大到小排序
util.Sorting.quickSort(Array) //針對數(shù)組排序,單不能對數(shù)組緩沖排序
val arr = Array(1,23,4,2,45)
arr.mkString(",") //指定分割符
arr.mkString("(",",",")") //指定前綴、分隔符、后綴
更多函數(shù)參見Scaladoc
5、多維數(shù)組:
val matrix = Array.ofDim[Int](5,4) //三行四列的二維數(shù)組
matrix(2)(3) //訪問第二行、第三個元素
6、scala數(shù)組和java互操作:由于scala數(shù)組是用java數(shù)組實現(xiàn)的,所以可以在java和scala之間來回傳遞,引入scala.collectin.JavaConversion ,可以在代碼中使用scala緩沖,在調(diào)用java方法時,這些對象會被自動包裝成java列表。反過來講,引入scala.collection.asScalaBuffer時,當(dāng)java方法返回java.util.List時,我們可以讓它轉(zhuǎn)換成一個Buffer
轉(zhuǎn)自:http://www.kankanews.com/ICkengine/archives/128572.shtml