Scala的陣列操作

541732025發表於2015-11-08
陣列在任何語言裡面都是很基本、很重要的一個資料結構,在Scala中也是如此。
陣列的定義:
1,定長陣列:
val nums = new Array[Int](10)
val a = new Array[String](10)
val s = Array("Hello", "World")

2,變長陣列
val b = ArrayBuffer[Int]()//定義一個變長陣列

陣列遍歷:
for (i <- 0 until a.length){
    println(i + ": " + a(i))
}
 
或者:
for(elem <- a){
    println(elem);
}

陣列操作:
s(0) = "Goodbye" // 賦值

b += 1
結果:ArrayBuffer(1)

b += (1, 2, 3, 5)
結果:ArrayBuffer(1, 1, 2, 3, 5)

b ++= Array(8, 13, 21)
結果:ArrayBuffer(1, 1, 2, 3, 5, 8, 13, 21)

b.trimEnd(5)
結果:ArrayBuffer(1, 1, 2),把最後5個元素去掉

b.insert(2, 6)
結果:ArrayBuffer(1, 1, 6, 2),在index=2處,插入6

b.insert(2, 7, 8, 9)
結果:ArrayBuffer(1, 1, 7, 8, 9, 6, 2),在index=2處,插入7,8,9三個元素

b.remove(2)
結果:ArrayBuffer(1, 1, 8, 9, 6, 2),刪除index=2處的元素

b.remove(2, 3)
結果:ArrayBuffer(1, 1, 2),從index=2處,刪除3個元素

b1 = b.toArray
結果:b1:Array(1, 1, 2),ArrayBuffer轉化為Array

val c = Array(2, 3, 5, 7, 11)
val result = for (elem <- c) yield 2 * elem
結果:result  : Array[Int] = Array(4, 6, 10, 14, 22),yield將結果賦值給result

for (elem <- c if elem % 2 == 0) yield 2 * elem
結果:Array[Int] = Array(4)
c.filter(_ % 2 == 0).map(2 * _)//更優雅的寫法

其它操作:
Array(1, 7, 2, 9).sum
結果:Int = 19

ArrayBuffer("Mary", "had", "a", "little", "lamb").max
結果:String = little

val d = ArrayBuffer(1, 7, 2, 9)
val bSorted = d.sorted //排序後重新生成一個ArrayBuffer
結果:ArrayBuffer(1, 2, 7, 9)

val e = Array(1, 7, 2, 9)
scala.util.Sorting.quickSort(e)//排序作用於e本身
結果:Array(1, 2, 7, 9)

e.mkString(" and ")
結果:String = 1 and 2 and 7 and 9 生成一個字串,由and連線起來

e.mkString("<", ",", ">")
結果:String = <1,2,7,9> 制定起止字串,以及連線符

二維陣列
val matrix = Array.ofDim[Double](3, 4)//定義矩陣
matrix(2)(1) = 42
結果:Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0.0, 0.0, 0.0, 0.0), Array(0.0, 42.0, 0.0, 0.0))
  
val triangle = new Array[Array[Int]](10)
for (i <- 0 until triangle.length)
 triangle(i) = new Array[Int](i + 1)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1825744/,如需轉載,請註明出處,否則將追究法律責任。

相關文章