1. 程式人生 > >Scala入門隨筆三

Scala入門隨筆三

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