定长数组
Scala中的Array是定长数组
1 2 3 4 5 6 7 8
| val nums = new Array[Int](10)
val s = Array("hello","word")
s(0) = "google"
|
scala 中的数组以Java数组的方式实现
变长数组:数组缓冲
Java中有ArrayList,Scala中有ArrayBuffer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import scala.collection.mutable.ArrayBuffer val b = ArrayBuffer[Int]() b+=1
b+=(1,2,3,4)
b++=Array(8,13,21)
b.trimEnd(5)
b.insert(2,6)
b.insert(2,7,8,9)
b.remove(2)
b.remove(2,5)
b.toArray
b.toBuffer
|
遍历数组和数组缓冲
scala中两种数据结构可以用同样的代码处理遍历
1 2 3 4
| for (i <- 0 until a.length) print(a(i))
|
until和to类似,但是until会排出最后一个元素,因此这里不需要length-1,不会outOfRange
还可以通过by来控制遍历的顺序和条件
1 2 3 4 5
| for(i <- 0 until a.length by 2)
for(i <- 0 until a.length by -1)
|
还可以不用数组下标,直接遍历元素
数组转换
scala允许对数组进行转换,转换是指对数组进行一定操作生成一个新的数组而不改变原来的数组。
1 2 3 4
| val a = Array(1,2,3,5) val result = for(ele <-a) yield 2*ele
|
for/yield创造一个相同类型的集合,结果包含yield后的表达式,每次迭代对应一个。
常用算法
数组可以直接调用一些常见的方法,比如sum,max,min,sorted,sortWith(>),mkString等
1 2 3 4 5 6 7
| val a = Array(1,2,3,4) a.sum a.max a.sorted a.sortWith(_>_) a.mkStirng("and")
|
解读Scaladoc
一些常见的数组操作函数


多维数组
多维数组通过ofDim来构建,通过两对括号来访问
1 2 3 4
| val matrix = Array.ofDim[Double](3,4)
matrix(0)(3)
|
也可以指定不规则多维数组,每行的长度不一样
1 2 3 4
| val tr = new Array[Array[Int]](10) for(i <- tr.indices) tr(i) = new Array[Int](i+1)
|
与Java的互操作
数组类型匹配的情况下,scala和Java的数组可以相互传递。
1 2 3
| val command = ArrayBuffer(1,2,3) val pb = new ProcessBuilder(command) val cmd: Buffer[Int] = pb.command()
|