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 数组常用的几种排序

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