1. 程式人生 > >Scala基礎(4):陣列

Scala基礎(4):陣列

import scala.collection.mutable.ArrayBuffer

object Demo {
  def main(args: Array[String]) {
    changInt // 呼叫函式
  }

  def changInt: Unit = {
    val a = Array(1, -2, 0, -3, 0, 4, 5) //定義一個固定長度的陣列
    val b = sigNumArr(a)
    b.foreach(println) // 迭代輸出

  }
  def sigNumArr(arr: Array[Int]) = {
    val buf = new
ArrayBuffer[Int]() // 定義一個數組緩衝(不定長陣列) buf ++= (for (i <- arr if i > 0) yield i) // ++= 連線一個數組 buf ++= (for (i <- arr if i == 0) yield i) buf ++= (for (i <- arr if i < 0) yield i) //println(buf) buf.toArray // 將陣列緩衝轉換成陣列 } }

陣列

建立

//固定陣列
val arr1 = new Array[Int](3
) // 初始值都是0 val arr2 = Array("Hello", "World") // 不用new關鍵字 //陣列緩衝 val arrBuffer = new ArrayBuffer[Int]()

元素訪問

陣列訪問呼叫角標的時候使用的是()不是[]
陣列緩衝的trimEnd方法十分高效,邏輯可以儘量往這邊靠攏

//固定陣列
arr2(0) = "Hi" //設定角標為0的值
println(arr2(0)) // 輸出 Hi
//陣列緩衝
arrBuffer += 12 // 新增元素 12
println(arrBuffer(0)) // 輸出 12

arrBuffer ++= arr // 新增 arr 所有元素後:12 0 0 0
arrBuffer.insert(2,5) //在角標處插入元素後:12 0 5 0 0 arrBuffer.trimEnd(3) //刪除倒數第 3 個元素後:12 0 0 0

轉換

val arr = arrBuffer.toArray //陣列緩衝轉化成固定陣列
val arrBuffer = arr.toBuffer //固定陣列轉化成陣列緩衝

遍歷

    for (i <- 0 until arrBuffer.length) print(arrBuffer(i))

    for (i <- arrBuffer.indices) print(arrBuffer(i))// arrBuffer.indices相當於0 until arrBuffer.length

    for (i <- 0 until(arrBuffer.length, 2)) print(arrBuffer(i)) // 每兩個一跳(會不會視為元組?)

    for (i <- (0 until arrBuffer.length).reverse) print(arrBuffer(i)) // 從尾部開始遍歷

    for (elem <- arrBuffer) println(elem)

    arrBuffer.foreach(println) //輸出每一個值

陣列轉換

    val a = Array(2, 3, 4, 5)
    val b = for (elem <- a) yield elem // 通過for yield 返回的是陣列或者陣列緩衝
    val c = for (elem <- a if elem % 2 == 0) yield elem //使用守衛過濾奇數,for yield是不會影響原陣列或陣列緩衝的

常用方法

    // 逆序
    arr.reverse:返回array的逆序
    arrayBuffer.reverse:返回arrayBuffer的逆序

    // 求和
    val a1 = Array(1, 2, 3, 4).sum //10
    println("常用演算法a1:" + a1)
    val a2 = ArrayBuffer(1, 2, 3, 4).sum //10
    println("常用演算法a2:" + a2)

    // 統計
    val a = arr.count(_ < a)//統計陣列arr中小於a的個數
    val a = arr.count(_ == a)//統計陣列arr中等於a的個數
    val a = arr.count(_ > a)//統計陣列arr中大於a的個數

    // 極值
    val b1 = Array("Mary", "had", "little").max //"little"
    println("常用演算法b1:" + b1)
    val b2 = ArrayBuffer("Mary", "had", "little").max //"little"
    println("常用演算法b2:" + b2)

    // 排序(新建另一個數組)
    val c1 = ArrayBuffer(1, 7, 9, 3)
    println("常用演算法c1:" + c1)
    val cSorted1 = c1.sorted //原陣列不會發生改變,cStorted1:1,3,7,9
    println("常用演算法cSorted1:" + cSorted1)

    val c2 = ArrayBuffer(1, 7, 9, 3)
    println("常用演算法c2:" + c2)
    val cSorted2 = c2.sorted //原陣列不會發生改變,cStorted2:1,3,7,9
    println("常用演算法cSorted2:" + cSorted2)

    // 排序(不新建陣列)
    val d1 = Array(1, 7, 9, 3)
    scala.util.Sorting.quickSort(d1)//只能用於固定長度陣列
    printArray(d1)

    val s = "HelloWorld"
    val str = s.take(3) //順序取 第三個以前 Hel
    val str = s.drop(3) //順序取 第三個以後 loWorld
    val str = s.takeRight(3) //逆序取 倒數第三個以後 rld
    val str = s.dropRight(3) //逆序取 倒數第三個以前 HelloWo
    val str = s.substring(1,3) //前閉後開 el

多維陣列

    val arr1 = Array.ofDim[Int](3, 4) // 直接建立 3行4列

    //不規則多維陣列
    val arr2 = new Array[Array[Int]](10) // 建立不規則多維陣列
    for (i <- 0 until arr2.length) arr2(i) = new Array[Int](i + 1)// 賦值