scala-02-數組的操作


scala中的數組和 java中的數組一樣, 定義了長度后不可改變

1, 產生一個數組: 

有3種創建數組的方式, 分別直接new, 直接賦值, 或者使用 Array中的rang來產生

  /**
    * 獲取數組
    */
  def getArray() : Array[String] = {
    var z: Array[String] = new Array[String](3)
    var x = new Array[String](3)
    var y = Array("123", "234", "345")
    var r = Array.range(10, 20, 3)  // 默認最后一個數字為步進
    var seg = 1 to 5    // 包含5
   var seg_util = 1 until 5  // 不包含5

  y }

 

2, 對數組中的元素進行賦值

  // 賦值
  def setValue(arr : Array[String]): Array[String] = {
    for(i <- 0 to (arr.length - 1)) {
      arr(i) = String.valueOf(Random.nextInt(10))
    }
    arr
  }
// 賦值
arr(0) = "abc"

 

3, 遍歷數組中的元素

  // 遍歷數組
  def scanArray(arr: Array[String]): Unit = {
    // 第一種
    for (x <- arr) {
      println("111..." + x)
    }

    // 第二種
    for (x <- 0 to (arr.length - 1)) {
      println("222..." + arr(x))
    }

   for (x <- 0 until arr.length) {
println("222...." + arr(x))
} }

 

4, 使用concat進行數組拼接

  // 使用 concat 進行數組合並
  def concatArray(arr1: Array[String], arr2: Array[String]): Array[String] = {
    var arr3 = Array.concat(arr1, arr2)
    for(i <- arr3) {
      println("concat" + i)
    }
    arr3
  }

 

6, 可變數組

def arrayBufferTest = {
    var arrayBuffer = ArrayBuffer[String]()
    // += 在尾補值, 可以補多個
    arrayBuffer += ("234", "456")
    // ++= 可以是任意集合
    arrayBuffer ++= Array("abc", "bcd")
    arrayBuffer ++= List("bdc", "aewr")

    // 刪除最后n哥元素
    arrayBuffer.trimEnd(3)

    for (i <- arrayBuffer) println(i)
  }

可變數組操作: 

  def arrayBufferInsert = {
    var arrayBuffer: ArrayBuffer[Int] = ArrayBuffer(1, 2, 3)
    // 在索引為0的位置插入元素
    arrayBuffer.insert(0, 8, 9, 0)
    // 從索引3刪除2哥元素
    arrayBuffer.remove(3, 2)

    // 轉換成定長數組
    val array = arrayBuffer.toArray

    for (i <- arrayBuffer) println(i)
  }

數組轉換

 def arrayTrans = {
    var array = ArrayBuffer[Int] (1, 2, 3, 4)
    // 緩沖數組轉換后仍然是緩沖數組
    val array_2 = for(i <- array) yield i * 2

    var array_new = Array(1,2, 3, 4)
    // 定長數組轉換后仍然是定長
    val array_new_2 = for(i <- array_new if i >= 2) yield i * 2

    for (i <- array_2 ) println(i)
    println()
    for (i <- array_new_2) println(i)
  }

數組的常用操作

 /**
    * 數組常用操作
    */
  def usage = {
    var array = Array(1, 2, 3, 4, 5, 6)
    println(array.sum)
    println(array.max)
    println(array.min)
    println(array.toString)
    println(array.mkString(","))
    println(array.mkString("<", ",", ">"))
  }

 

數組操作的 api

使用前需要先 import Array._

1

def apply( x: T, xs: T* ): Array[T]

創建指定對象 T 的數組, T 的值可以是 Unit, Double, Float, Long, Int, Char, Short, Byte, Boolean。

2

def concat[T]( xss: Array[T]* ): Array[T]

合並數組

3

def copy( src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit

復制一個數組到另一個數組上。相等於 Java's System.arraycopy(src, srcPos, dest, destPos, length)。

4

def empty[T]: Array[T]

返回長度為 0 的數組

5

def iterate[T]( start: T, len: Int )( f: (T) => T ): Array[T]

返回指定長度數組,每個數組元素為指定函數的返回值。

以上實例數組初始值為 0,長度為 3,計算函數為a=>a+1

scala> Array.iterate(0,3)(a=>a+1) res1: Array[Int] = Array(0, 1, 2)
6

def fill[T]( n: Int )(elem: => T): Array[T]

返回數組,長度為第一個參數指定,同時每個元素使用第二個參數進行填充。

7

def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]]

返回二數組,長度為第一個參數指定,同時每個元素使用第二個參數進行填充。

8

def ofDim[T]( n1: Int ): Array[T]

創建指定長度的數組

9

def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]]

創建二維數組

10

def ofDim[T]( n1: Int, n2: Int, n3: Int ): Array[Array[Array[T]]]

創建三維數組

11

def range( start: Int, end: Int, step: Int ): Array[Int]

創建指定區間內的數組,step 為每個元素間的步長

12

def range( start: Int, end: Int ): Array[Int]

創建指定區間內的數組

13

def tabulate[T]( n: Int )(f: (Int)=> T): Array[T]

返回指定長度數組,每個數組元素為指定函數的返回值,默認從 0 開始。

以上實例返回 3 個元素:

scala> Array.tabulate(3)(a => a + 5) res0: Array[Int] = Array(5, 6, 7)
14

def tabulate[T]( n1: Int, n2: Int )( f: (Int, Int ) => T): Array[Array[T]]

返回指定長度的二維數組,每個數組元素為指定函數的返回值,默認從 0 開始。

 

 

 

代碼來自 菜鳥教程: http://www.runoob.com/scala/scala-arrays.html


免責聲明!

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



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