一、定長數組
Array定長數組,訪問數組元素需要通過() 數組長度是固定的,但是內容可以修改
val nums = new Array[Int](10) //長度為10的int數組 初始化為0 val strs = new Array[String](10) //長度為10的String數組 初始化為null val s = Array("Hello", "World") //初始化數組長度為2,不需要new s(0) = "GoodBye" //訪問數組元素通過() println(nums(0)) println(strs(0)) println(s(0)+" "+s(1))
結果
0 null GoodBye World
二、變長數組
變長數組使用ArrayBuffer
import scala.collection.mutable.ArrayBuffer val b = ArrayBuffer[Int]() //或者 new ArrayBuffer[Int] b+=1 //在尾端添加元素 //ArrayBuffer(1) b+=(2,3,4,5) //在尾端添加多個元素 //ArrayBuffer(1,2,3,4,5) b++=ArrayBuffer(8,19,20) //可以使用++-操作符追加任意集合 //ArrayBuffer(1,2,3,4,5,8,19,20) b.trimEnd(3) //在尾部刪除3個元素 //ArrayBuffer(1,2,3,4,5) b.insert(2,6) //在下標2之前插入6 //ArrayBuffer(1,2,6,3,4,5) b.insert(3,7,8,9) //在下標3之前插入7,8,9 //ArrayBuffer(1,2,6,7,8,9,3,4,5) b.remove(2) //刪除下標為2的元素 //ArrayBuffer(1,2,7,8,9,3,4,5) b.remove(2,3) //從下標為2的元素開始,刪除3個元素 //ArrayBuffer(1,2,3,4,5) val c = b.toArray //不知道元素個數先構建ArrayBuffer,然后再轉化成數組 println(c(0)) println(c.toBuffer) //數組轉化成數組緩沖
結果
1
ArrayBuffer(1, 2, 3, 4, 5)
三、遍歷數組和數組緩沖
for(i<- 0 until b.length) print(c(i)) //直接通過下標訪問數組,until 不包括上線 println() for(i<- 0 until (b.length,2)) print(b(i)) //step = 2 步長為2 println() for(i<- (0 until b.length).reverse) print(b(i)) //反轉 println() for(i<- b) print(i) //不使用數組下標直接訪問元素 println()
結果
12345
135
54321
12345
四、數組轉換
通過for yield對數據進行轉換
val a = Array(2,3,5,7,11) val b = for(i<- a if i%2 !=0) yield i * 2 //生成一個新的數組 for(i<- b) print(i+" ")
結果
6 10 14 22
五、常用算法
import scala.util.Sorting.quickSort val a = Array(2,9,5,7,11) println(a.sum) println(a.max) println(a.toBuffer) println(a.mkString(" and ")) println(a.mkString("<"," and ",">")) println(a.toBuffer.sorted) //數組本身不變,產生新的數組,升序排列 println(a.toBuffer.sortWith(_>_)) //數組本身不變,產生新的數組,降序排列 println(a.toString) println(a.toBuffer.toString()) quickSort(a) //對數組本身排序
結果
34 11 ArrayBuffer(2, 9, 5, 7, 11) 2 and 9 and 5 and 7 and 11 <2 and 9 and 5 and 7 and 11> ArrayBuffer(2, 5, 7, 9, 11) ArrayBuffer(11, 9, 7, 5, 2) [I@4a3d0611 ArrayBuffer(2, 9, 5, 7, 11)
六、解讀scaladoc
七、多維數組
八、與java互操作
1.
val r = scala.util.Random val f = (n:Int)=>{ val arr = new Array[Int](n) for(i<- 0 until n) arr(i)=r.nextInt(n) arr } val a =f(10) println(a.toBuffer.toString())
2.
val arr = Array(1,2,3,4,5) for(i<- 0 until arr.length/2 ){ val tmp = arr(i*2+1) arr(i*2+1)=arr(i*2) arr(i*2)=tmp } println(arr.toBuffer.toString())
3.
val new_arr = for(i<- 0 until arr.length) yield if(i%2==0){ if(i==arr.length-1) arr(i) else arr(i+1) }else{ arr(i-1) } println(new_arr.toBuffer.toString())
4.
val a = Array(3,0,4,7,9,-8,-2,2,1,0,5) val new_a = for(j<- 1 to 2 ;i<- 0 until a.length if j==1 && a(i)>0 || j==2 && a(i)<=0 ) yield a(i) println(new_a.toBuffer.toString())
5.
val d = Array[Double](1,2,5,9,3,2)
println(d.sum/d.length)
6.
val d = Array(1,2,5,9,3,2) println(d.sorted.toBuffer.toString) println(d.sortWith(_>_).toBuffer.toString()) scala.util.Sorting.quickSort(d) println(d.toBuffer.toString()) val db = ArrayBuffer (1,2,5,9,3,2) println(db.sorted) println(db.sortWith(_>_))
7.
val db = ArrayBuffer (1,2,5,9,3,2)
println(db.distinct.toString())
參考《快學Scala》