Scala最全系统学习-Scala基础04--scala数组
1.数组
1.1 定长数组和变长数组
(1) 定长数组定义格式:
val arr = new ArrayT
(2) 变长数组定义格式:
val arr = ArrayBufferT
注意需要导包:t import scala.collection.mutable.ArrayBuffer
object collection {
def main(args: Array[String]): Unit = {
//初始化一个长度为 8 的定长数组,其所有元素均为 0
val arr1 = new Array[Int](8)
//直接打印定长数组,内容为数组的 hashcode 值
println (arr1)
//将数组转换成数组缓冲,就可以看到原数组中的内容了
//toBuffer 会将数组转换长数组缓冲
println (arr1.toBuffer)
//注意:如果 new,相当于调用了数组的 apply 方法,直接为数组赋值
//初始化一个长度为 1 的定长数组
val arr2 = Array [Int](10)
println (arr2.toBuffer)
//定义一个长度为 3 的定长数组
val arr3 = Array ( "hadoop", "storm", "spark")
//使用()来访问元素
println (arr3(2))
//变长数组(数组缓冲)
//如果想使用数组缓冲,需要导入 import scala.collection.mutable.ArrayBuffer
val ab = ArrayBuffer[Int]()
//向数组缓冲的尾部追加一个元素
//+=尾部追加元素
ab += 1
//追加多个元素
ab += (2, 3, 4, 5)
//追加一个数组++=
ab ++= Array (6, 7)
//追加一个数组缓冲
ab ++= ArrayBuffer(8,9)
//打印数组缓冲 ab
//在数组某个位置插入元素用 insert,从某下标插入
ab.insert(0, -1, 0)
//删除数组某个位置的元素用 remove 按照下标删除
ab.remove(0)
println (ab)
}
}
执行结果:
1.2 遍历数组
1.增强 for 循环
2.好用的 until 会生成脚标,0 until 10 包含 0 不包含 10
def main(args: Array[String]) {
//初始化一个数组
val arr = Array (1,2,3,4,5,6,7,8)
//增强 for 循环
for(i <- arr)
println (i)
//好用的 until 会生成一个 Range
//reverse 是将前面生成的 Range 反转
for(i <- (0 until arr.length).reverse)
println (arr(i))
}
1.3数组转换
yield 关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变
def test2(args: Array[String]) {
//定义一个数组
val arr = Array (1, 2, 3, 4, 5, 6, 7, 8, 9)
//将偶数取出乘以 10 后再生成一个新的数组
val res = for (e <- arr if e % 2 == 0) yield e * 10
println (res.toBuffer)
//更高级的写法,用着更爽
//filter 是过滤,接收一个返回值为 boolean 的函数
//map 相当于将数组中的每一个元素取出来,应用传进去的函数
val r = arr.filter(_ % 2 == 0).map(_ * 10)
println (r.toBuffer)
}