定長陣列
陣列創建后長度不能改變,
// 創建一個長度為10,Int型別的陣列,
val arr = new Array[Int](10)
// 當已提供初始值時,就不需要用new了
// 長度為2的String陣列
val arr = Array("hello","hi")
// 我們使用()而不是[]來訪問陣列中的元素
arr(0) = "good luck"
變長陣列:陣列緩沖
類似java中的ArrayList,c++中的vector,
import scala.collection.mutable.ArrayBuffer
val buff = new ArrayBuffer[Int]()
//往buff添加元素,
buff+=1
//你也可以一次添加多個元素
buff+=(2,3,4) // 相當于buff.+=(elem:Int*)
//++= 可以追加任何Int集合
buff++=ArrayBuffer(5,6)
//移除尾部3個元素
buff.trimEnd(3)
//1,2,3
//在buff中插入元素
buff.insert(0,7)
//7,1,2,3
//移除任意位置的元素
buff.remove(2)
//7,1,3
//ArrayBuffer和Array的互轉
buff.toArray // ArrayBuffer轉為Array
arr.toBuffer // Array轉為ArrayBuffer
遍歷Array和ArrayBuffer
// 0到len-1
for(i <- 0 until arr.length){
print(s"$i:${arr(i)}")
}
// 內置函式回傳陣列下標值
for(i <- arr.indices){
print(s"$i:${arr(i)}")
}
// 倒序遍歷,步長設定為-1
for(i <- arr.length-1 to 0 by -1){
print(s"$i:${arr(i)}")
}
// 也可以對下標進行反轉
for(i <- arr.indices.reverse){
print(s"$i:${arr(i)}")
}
// 如果不需要下標,想直接取其中的元素
for(elem <- arr){
print(elem)
}
陣列轉換
當你遍歷一個集合時,只想處理那些滿足特定條件的元素或者對集合中的元素進行操作后回傳一個新的集合存盤操作后的結果時,你可以這樣做,
// 對每個偶數元素進行翻倍,并丟掉奇數元素,
// range 回傳一個陣列,其中包含一個范圍內遞增的整數序列,(左閉右開的區間,不包含10)
val arr = Array.range(1,10)
// 上一篇博文說過 for/yield 推導式回傳的就是一個序列,
val result: Array[Int] = for (elem <- arr if elem % 2 == 0) yield elem * 2
//4 8 12 16
// 另一種做法如下:
// filter和map都是scala的高級函式這個我們之后會詳細說,
val result: Array[Int] = arr.filter(_%2==0).map(_*2)
常用演算法
//求和 只適用元素型別是數值型別的,
val arr = Array.range(1,10)
val sum = arr.sum // 45
//最大最小元素
val strs = Array("hello","a","bb")
strs.max //"hello"
strs.min //"a"
//排序
//與java不同的是,scala排序,原陣列并不會變化,回傳的是一個新的陣列,
val result1 = arr.sorted
//如果想自定義排序規則,你可以使用sortWith()方法,
val result2: Array[Int] = arr.sortWith((x, y) => x > y)
//這里用的是scala的函式式編程,我們可以進一步簡寫,
val result3: Array[Int] = arr.sortWith(_>_)
//在java中我們可以用Arrays.toString()來列印陣列中的元素,
//在scala我們可以用mkString方法,
arr.mkString(",") // 1,2,3,...,9
// 去除陣列中重復的部分
val arr = Array(1,1,2,3)
val distinct = arr.distinct // 1,2,3
多維陣列
// 構造一個3行4列的二維陣列,
val arr: Array[Array[Int]] = Array.ofDim[Int](3, 4)
//你也可以構造不規則陣列,每一行長度各不相同,
val array = new Array[Array[Int]](3)
//array是3行的,使用的時候要自己new 一個行陣列,
array(0) = new Array[Int](10)
//訪問多維陣列,
arr(0)(0) = 1
碼字不易,覺得文章不錯的話,麻煩點下推薦,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/27951.html
標籤:其他
