Scala數組操作:
1.定長數組 長度不變的數組的聲明:
//長度為10的整數數組,所有元素初始化為0 val numArr = new Array[Int](10)//長度為10的字串數組,所有元素初始化為nullval numArr = new Array[String](10)//長度為2的數組,資料類型自動推斷出來,已經提供初始值就不需要new關鍵字val s = Array("cai","yong")//通過ArrayName(index)訪問數組元素和更改數組元素val s = Array("cai","yong") println(s(0))s(0) = "haha"println(s(0))輸出:
cai
haha
2.變長數組:數組緩衝 Scala也支援長度變化的數組,支援的資料結構是ArrayBuffer
//一個空的數組緩衝,準備存放整數 val ab = ArrayBuffer[Int]() val ab2 = new ArrayBuffer[Int]//用+=在尾部添加元素ab += 2//在尾部添加多個元素ab += (1,2,3,4,5)//通過++=往數組緩衝後面追加集合 ab ++= Array(6,7,8,9)//使用trimEnd(n)移除尾部n個元素ab.trimEnd(3)//在下標3之前插入元素ab.insert(3, 33)//插入多個元素,第一個值為index,後面所有的值為要插入的值ab.insert(3,3,4,5,6)//移除某個位置的元素ab.remove(3)//移除從下標為n開始(包括n)的count個元素ab.remove(n, count)
有時候需要構造一個Array,但是不知道具體要存放多少元素,可以先構造ArrayBuffer,再調用toArray方法轉化成Array,同樣,對Array調用toBuffer方法可以轉成ArrayBuffer.
註:在數組緩衝的尾部進行元素添加移除操作的效率很高,但是在任意位置插入或移除元素的效率並不太高效,因為涉及到數組元素的移動。
3.遍曆數組
//for迴圈遍曆for(i <- 0 until ab.length){ print(ab(i) + ", ") }//根據特定步長遍曆數組for(i <- 0 until (ab.length, 2)){ print(ab(i) + ", ") }//從數組的尾部開始向前遍曆數組for(i <- (0 until ab.length).reverse){ print(ab(i) + ", ")}//類似於Java中的foreach遍曆數組 for(elem <- ab){ print(elem + ", ")}
4.數群組轉換
//進行數群組轉換會產生一個新的數組,而不會修改原始數組 val change = for(elem <- ab) yield elem * 2for(elem <- change){print(elem + ", ") }//添加一個守衛的數群組轉換val change = for(elem <- ab if elem%2 == 0) yield elem * 2
5.數組操作常用演算法
//sum求和(數組與阿奴必須是數值型資料)println(change.sum)//min max 輸出數組中最小和最大元素println(change.min)println(change.max)//使用sorted方法對數組或數組緩衝進行升序排序,這個過程不會修改原始數組 val sortArr = ab.sorted for(elem <- sortArr) print(elem + ", ")//使用比較函數sortWith進行排序val sortArr = ab.sortWith(_>_)//數組顯示 println(sortArr.mkString("|")) println(sortArr.mkString("startFlag","|","endFlag"))
6.多維陣列
//構造一個2行3列的數組val arr = Array.ofDim[Int](2,3)println(arr.length)println(arr(0).length)arr(0)(0) = 20println(arr(0)(0))//建立長度不規則的數組val arr = new Array[Array[Int]](3) for(i <- 0 until arr.length){arr(i) = new Array[Int](i + 2)} for(i <- 0 until arr.length){println(arr(i).length)}
*****************以上內容摘自:《快學Scala》 [美]Cay S. Horstmann著 電子工業出版社****************