Scala入門隨筆三
阿新 • • 發佈:2018-12-25
1.陣列是相同資料型別的元素按一定順序排列的集合。Scala中的陣列分為定長和變長的陣列。兩種陣列定義時的區別如下:
//定長陣列(通過顯示地new建立)。
scala>val numArray = new Array[Int](10)
numArray:Array[Int] = Array(0,0,0,0,0,0,0,0,0,0)
scala> val strArray = new Array[String](10)
strArray:Array[String] = Array(null,null,null,null,null,null,null,null,null,null)
//定長陣列(無new操作的陣列定義方式,其實它呼叫的是Applay物件的apply方法進行陣列建立操作)。
scala>val strArray2 = Array("First","Second")
strArray2:Array[String] = Array(First,Second)
//變長陣列,最常用的變長陣列為ArrayBuffer,在包scala.collection.mutable中,使用時需要顯示地引入。(通過顯示地new建立,也可以不通過new建立,原理同上)。
scala>import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer
scala>val strArrayVar = new ArrayBuffer[String]()
strArrayVar:scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()
2.scala的陣列遍歷有兩種方法即通過索引遍歷和直接陣列遍歷,具體操作如下:
scala> val intArrayVar = ArrayBuffer[Int](1,1,2)
intArrayVar:scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1,1,2)
//索引遍歷。對陣列內容進行引用的方法如下intArrayVar(i)。
scala> for(i <- 0 to intArrayVar.length-1) println("Array Element: "+intArrayVar(i))
Array Element:1
Array Element:1
Array Element:2
scala> for(i <- 0 until intArrayVar.length) println("Array Element: "+intArrayVar(i))
Array Element:1
Array Element:1
Array Element:2
//索引遍歷陣列的好處是還可以在for迴圈中加入過濾條件
scala> for(i <- 0 until (intArrayVar.length,2)) println("Array Element: "+intArrayVar(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> for(i <- intArrayVar) println("Array Element: "+intArrayVar(i))
Array Element:1
Array Element:1
Array Element:2
此外我們還可以遍歷生成新的陣列,並且遍歷後原陣列保持不變。生成的額新陣列與原陣列的性質相同即原陣列為定長(變長)陣列,新陣列也為定長(變長)陣列:
scala> val intArrayVar2 = for(i <- intArrayVar) yield i*2
intArrayVar2:scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2,2,4)
3.對變長陣列做進一步的理解:當在變長陣列中進行一些操作時,這些操作直接作用於原始定義的集合即該變長陣列:
//在尾部新增元素,+=即為在尾部新增元素的意思。
scala> strArrayVar += "a"
res18: strArrayVar.type = ArrayBuffer(a)
scala> strArrayVar += ("c","b")
res19: strArrayVar.type = ArrayBuffer(a,c,b)
scala strArrayVar
res20:scala.collection,mutable.ArrayBuffer[String] = ArrayBuffer(a,c,b)
4.大多數情況下我們在使用陣列時還會用到許多陣列中的函式:
var 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
res61: Int = 55
//極大值
scala>intArr.max
res62: Int = 10
//極小值
scala>intArr.min
res63: Int = 1
//mkString()方法
scala>intArr.mkString(",")
res64: String = 1,2,3,4,5,6,7,8,9,10
5.scala中的多維陣列:
//多維陣列的定義
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)
res74: Int = 3
//多維陣列的遍歷
scala> for(i <- multiDimArr) println(i.mkString(","))
1,2,3
2,3,4
scala> for(i <- multiDimArr)
| for(j <- i) print(j+" ")
1 2 3 2 3 4