目录
- 1. 定长数组
- 1. 初始化定长数组
- 2. 转换成数组缓冲
- 2. 变长数组(数组缓冲)
- 1. 使用数组缓冲
- 2. 追加
- 3. 插入
- 4. 删除
- 5. 截断
- 6. 转成定长数组
- 3. 遍历数据
- 1、 增强 for 循环
- 2、 to
- 3、 until
- 4. 数组转换
- 5. 数组常用算法
- 6. 多维数组
1. 定长数组
1. 初始化定长数组
1. 初始化一个长度为 5 的定长数组,所有元素值均为 0。
注意:如果 new,相当于调用了数组的 apply 方法,直接为数组赋值。
val arr = new Array[Int](5)
// 打印定长数组,内容为数组的 hashcode 值
println(arr) // [I@27c20538
2. 初始化一个长度为 8 的定长数组。
val arr = Array[Int](8)
println(arr) // [I@10bdf5e5
3. 初始化一个长度为 3 的定长数组。
val arr = Array("hello", "hi", "spark")
//使用() 访问元素
println(arr(2)) // spark
2. 转换成数组缓冲
.toBuffer 会将数组转换成数组缓冲,可以打印原数组中的内容。
var arrBuffer = arr.toBuffer
println(arrBuffer) // ArrayBuffer(hello, hi, spark)
2. 变长数组(数组缓冲)
1. 使用数组缓冲
需要导入 import scala.collection.mutable.ArrayBuffer。
import scala.collection.mutable.ArrayBuffer
...
val arr = ArrayBuffer[Int]() // ArrayBuffer()
2. 追加
向数组缓冲的尾部追加一个元素。
// +=尾部追加元素,arr4 += 1, +=(,) 追加多个元素
arr += (2, 3, 4, 5) // ArrayBuffer(2, 3, 4, 5)
追加一个数组 ++=,结果仍然是ArrayBuffer。
arr ++= Array(6, 7) // ArrayBuffer(2, 3, 4, 5, 6, 7)
追加一个List ++=
arr ++= List(8, 9) // ArrayBuffer(2, 3, 4, 5, 6, 7, 8, 9)
追加一个数组缓冲
arr ++= ArrayBuffer(10, 11) // ArrayBuffer(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
3. 插入
在数组某个位置插入元素用 insert(index,value,value..)。
// 在首部插入 -1 和 0
arr.insert(0, -1, 0) // ArrayBuffer(-1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
4. 删除
删除数组某个位置的元素用 remove(index,value,value..)
// 删除index=8开始的2个元素
arr.remove(8, 2) // ArrayBuffer(-1, 0, 2, 3, 4, 5, 6, 7, 10, 11)
5. 截断
// 截断尾部2个元素
arr.trimEnd(2) // ArrayBuffer(-1, 0, 2, 3, 4, 5, 6, 7)
// 截断前3个元素
arr.trimStart(3) // ArrayBuffer(3, 4, 5, 6, 7)
6. 转成定长数组
var arr2 = arr.toArray
3. 遍历数据
1、 增强 for 循环
for(i <- arr)
println(i)
2、 to
// 0 to 10,包含0 包含10
for(i <- (0 to arr.length - 1))
println(arr(i))
3、 until 会生成索引
// 0 until 10,包含0不包含10,until 会生成一个 Range,reverse将生成的 Range 反转
for(i <- (0 until arr.length).reverse)
println(arr(i))
// 步长间隔为 2,
for(i <- (0 until (arr.length, 2)))
println(arr(i))
// 1
// 3
// 5
// 7
4. 数组转换
使用yield 关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变。或者 filter + map。
// 定义一个数组
val arr = Array(1, 2, 3, 4, 5, 6, 7, 8)
// 将偶数取出乘以 10 后再生成一个新的数组
val arr2 = for (e <- arr if e % 2 == 0) yield e * 10
println(arr2.toBuffer)
// filter 过滤,接收一个返回值为 boolean 的函数
// map 相当于将数组中的每一个元素取出来,应用传进去的函数
val arr3 = arr.filter(_ % 2 == 0).map(_ * 10)
println(arr3.toBuffer)
5. 数组常用算法
// 定义一个数组
val arr = Array(1, 2, 3, 4, 5, 6, 7, 8)
// 求和
arr.sum // 36
// 最大值
arr.max // 8
// 最小值
arr.min // 1
// toString
arr.toString() // [I@5ce81285
// 指定分隔符
arr.mkString(",") // 1,2,3,4,5,6,7,8
arr.mkString("<",",",">") // <1,2,3,4,5,6,7,8>
6. 多维数组
var arr = Array(Arra(1,2,3),Array(2,3,4))
arr(0)(1) // 2
for(i <- arr)
println( i .mkString(","))
// 1,2,3
// 2,3,4