Scala學習七:數組

Scala學習七:數組


Scala中有 變長數組 和 定長數組。Scala的數組以Java數組實現。
Scala 數組大小 及 訪問數組元素 用"小括號 ()" 修飾。
Java 數組大小 及 訪問數組元素 用 "中括號 []" 修飾。
Scala 不指定數組大小,用元素直接初始化數組 用 "小括號()" 修飾。
Java 不指定數組大小,用元素直接初始化數組 用 "大括號{}" 修飾

Scala代碼:

    // 定長數組:scala.ArrayArray
    val arr = new Array[Int](10)
    arr(0) = 1
    val arr2 = Array(1,2,3)
    println(arr2(2))

    // 變長數組:
    scala.collection.mutable.ArrayBuffer
    val arrBuf = new ArrayBuffer[String](10)
    // 變長數組可以不指定數組大小
    val arrBuf2 = new ArrayBuffer[String]
    val arrBuf3 = ArrayBuffer("a","b","c")

Java代碼:

    int[] arr = new int[10];
    arr[0] = 0;
    String[] arrStr = new String[10];
    String[] arrStr2 = new String[]{"a","b","c"};
    System.out.println(arrStr2[2])

在數組尾部插入元素 或 集合操作是高效的。
但是在數據中間插入 元素 或 集合 操作是低效的,因爲所有元素都必須被向後平移。

Scala中數組迭代有3種方式:

    println("------- ArrayBuffer [foreach] ")
    arrBuf2.foreach(e=>{
      println(" element = " + e)
    })

    println("------- ArrayBuffer [for until] ")
    // for(a <- 0.until(3)){ 
    // 0 until 3 '等於==' 0.until(3)
    for(a <- 0 until 3){
      println(arrBuf2(a))
    }

    println("------- ArrayBuffer [for element] ")
    // 不用下標,直接訪問數組元素
    for(a <- arrBuf2){
      println(a)
    }

對數組的很大比例的基本都是在排序,求和,Scala支持對數據進行方便快捷的操作。

    println("------- Array [init] ")
    val arr = new Array[Int](10)
    val arr2 = Array(2, 1, 3)

    println("------- Array [sum] ")
    println(" sum = " + arr2.sum)
    println(" max = " + arr2.max)
    println(" min = " + arr2.min)
    // 排序並不修改原始版本,而是產生一個新集合
    println(" sort = " + arr2.sorted.mkString(","))

Scala中可以排序的數據必須支持比較操作,包括數字,字符串,或其他帶有Ordered物質的數據。

Scala常用的幾種排序:

  • sortBy: sortBy[B](f: (A) ⇒ B)(implicit ord: math.Ordering[B]): List[A] 按照應用函數f之後產生的元素進行排序

  • sorted: sorted[B >: A](implicit ord: math.Ordering[B]): List[A] 按照元素自身進行排序

  • sortWith: sortWith(lt: (A, A) ⇒ Boolean): List[A] 使用自定義的比較函數進行排序

參考:Scala 數組常用的幾種排序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章