集合類之數組(七)

簡介

  Scala 語言中提供的數組是用來存儲固定大小的同類型元素。聲明數組是聲明一個就像numbers這樣的變量,然後使用 numbers[0]、numbers[1]、…、numbers[99] 來表示一個個單獨的變量。數組中某個指定的元素是通過索引來訪問的。

  數組的第一個元素索引爲0,最後一個元素的索引爲元素總數減1。

聲明數組

  數組語法格式:

var z:Array[String] = new Array[String](3)
或
var z = new Array[String](3)

z(0) = "Runoob"; z(1) = "Baidu"; z(4/2) = "Google"

var z = Array("Runoob", "Baidu", "Google")

簡單實例

定長數組(Array)

//定義一個長度爲10的數值數組
scala> val numberArray=new Array[Int](10)
numberArray: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
//定義一個長度爲10的String類型數組
scala> val strArray=new Array[String](10)
strArray: Array[String] = Array(null, null, null, null, null, null, null, null,
null, null)

//可以看出:複雜對象類型在數組定義時被初始化爲null,數值型被初始化爲0

//數組元素賦值
scala> strArray(0)="First Element"
//需要注意的是,val strArray=new Array[String](10)
//這意味着strArray不能被改變,但數組內容是可以改變的
scala> strArray
res62: Array[String] = Array(First Element, null, null, null, null, null, null,
null, null, null)


//另一種定長數組定義方式
//這種調用方式其實是調用其apply方法進行數組創建操作
scala> val strArray2=Array("First","Second")
strArray2: Array[String] = Array(First, Second)

變長數組(ArrayBuffer)

//要使用ArrayBuffer,先要引入scala.collection.mutable.ArrayBuffer
scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer

//創建String類型ArrayBuffer數組緩衝
scala> val strArrayVar=ArrayBuffer[String]()
strArrayVar: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()

//+=意思是在尾部添加元素
scala> strArrayVar+="Hello"
res63: strArrayVar.type = ArrayBuffer(Hello)

//+=後面還可以跟多個元素的集合
//注意操作後的返回值
scala> strArrayVar+=("World","Programmer")
res64: strArrayVar.type = ArrayBuffer(Hello, World, Programmer)

//顯示完整數組內容
scala> strArrayVar
res65: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(Hello, World,
Programmer)

//++=用於向數組中追加內容,++=右側可以是任何集合
//追加Array數組
scala> strArrayVar++=Array("Wllcome","To","XueTuWuYou")
res66: strArrayVar.type = ArrayBuffer(Hello, World, Programmer, Wllcome, To, Xue
TuWuYou)
//追加List
scala> strArrayVar++=List("Wellcome","To","XueTuWuYou")
res67: strArrayVar.type = ArrayBuffer(Hello, World, Programmer, Wllcome, To, Xue
TuWuYou, Wellcome, To, XueTuWuYou)

//刪除末尾n個元素
scala> strArrayVar.trimEnd(3)

scala> strArrayVar
res69: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(Hello, World,
Programmer, Wllcome, To, XueTuWuYou)
//創建整型數組緩衝
scala> var intArrayVar=ArrayBuffer(1,1,2)
intArrayVar: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2)

//在數組索引爲0的位置插入元素6
scala> intArrayVar.insert(0,6)

scala> intArrayVar
res72: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(6, 1, 1, 2)

//在數組索引爲0的位置插入元素7,8,9
scala> intArrayVar.insert(0,7,8,9)

scala> intArrayVar
res74: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(7, 8, 9, 6, 1, 1,2)

//從索引0開始,刪除4個元素
scala> intArrayVar.remove(0,4)

scala> intArrayVar
res77: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2)

//轉成定長數組
scala> intArrayVar.toArray
res78: Array[Int] = Array(1, 1, 2)

//將定長數組轉成ArrayBuffer
scala> res78.toBuffer
res80: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 1, 2)

數組遍歷

//to
scala> for(i <- 0 to intArrayVar.length-1) println("Array Element: " +intArrayVar(i))
Array Element: 1
Array Element: 1
Array Element: 2
//until
scala> for(i <- 0 until intArrayVar.length) println("Array Element: " +intArrayVar(i))
Array Element: 1
Array Element: 1
Array Element: 2

//數組方式(推薦使用)
scala> for(i <- intArrayVar) println("Array Element: " + i)
Array Element: 1
Array Element: 1
Array Element: 2

//步長爲2
scala>  for(i <- 0 until (intArrayVar.length,2)) println("Array Element: " +intA
rrayVar(i))
Array Element: 1
Array Element: 2

//倒序輸出
scala> for( i<- (0 until intArrayVar.length).reverse) println("Array Element: "+
 intArrayVar(i))
Array Element: 2
Array Element: 1
Array Element: 1

數組轉換

//生成新的數組,原數組不變
//緩衝數據轉換後產生的仍然是緩衝數組
scala> var intArrayVar2=for(i <- intArrayVar) yield i*2
intArrayVar2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 2, 4)

//定長數組轉轉後產生的仍然是定長數組,原數組不變
scala> var intArrayNoBuffer=Array(1,2,3)
intArrayNoBuffer: Array[Int] = Array(1, 2, 3)

scala> var intArrayNoBuffer2=for(i <- intArrayNoBuffer) yield i*2
intArrayNoBuffer2: Array[Int] = Array(2, 4, 6)

//加入過濾條件
scala>  var intArrayNoBuffer2=for(i <- intArrayNoBuffer if i>=2) yield i*2
intArrayNoBuffer2: Array[Int] = Array(4, 6)

常用運算

//定義一個整型數組
scala> val intArr=Array(1,2,3,4,5,6,7,8,9,10)
intArr: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

//求和
scala> intArr.sum
res87: Int = 55

//求最大值
scala> intArr.max
res88: Int = 10

scala> ArrayBuffer("Hello","Hell","Hey","Happy").max
res90: String = Hey

//求最小值
scala> intArr.min
res89: Int = 1

//toString()方法
scala> intArr.toString()
res94: String = [I@141aba8

//mkString()方法
scala> intArr.mkString(",")
res96: String = 1,2,3,4,5,6,7,8,9,10

scala> intArr.mkString("<",",",">")
res97: String = <1,2,3,4,5,6,7,8,9,10>

多維數組

//定義2行3列數組
scala> var multiDimArr=Array(Array(1,2,3),Array(2,3,4))
multiDimArr: Array[Array[Int]] = Array(Array(1, 2, 3), Array(2, 3, 4))

//獲取第一行第三列元素
scala> multiDimArr(0)(2)
res99: Int = 3

//多維數組的遍歷
scala> for(i <- multiDimArr) println( i.mkString(","))
1,2,3
2,3,4

忠於技術,熱愛分享。歡迎關注公衆號:java大數據編程,瞭解更多技術內容。

這裏寫圖片描述

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