Scala--數組相關操作


一、定長數組

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》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM