在Scala中,数组是一种常用的数据结构,它提供了多种操作来处理数据。数组分为可变数组和不可变数组两种类型。本文将详细介绍这两种数组的特点、操作方法以及如何使用它们。
可变数组(ArrayBuffer)
创建可变数组
val arr1 = ArrayBuffer(1, 2, 3)
添加元素
arr1 += 4 // 在数组末尾添加元素
arr1.insert(0, 100) // 在指定位置插入元素
删除元素
arr1 -= 3 // 删除指定的元素
arr1.remove(0) // 删除指定位置的元素
修改元素
arr1(0) = 50 // 通过下标修改元素值
查询元素
println(s"50在数组中吗? ${arr1.contains(50)}") // 判断元素是否存在
println(s"500在数组中的下标是: ${arr1.indexOf(500)}") // 查找元素的下标
遍历数组
val it1 = arr1.iterator
while (it1.hasNext) println(it1.next())
不可变数组(Array)
创建不可变数组
val arr1 = Array(1, 2, 3, 4, 5, 6)
常用方法
截取数组
val arr2 = arr1.slice(2, 5) // 从源数组中截取一部分
遍历
arr2.foreach(println)
映射
val arr3 = Array(1, 2, 3).map(e => e * 2) // 对数组元素进行映射操作
过滤
val arr4 = Array(2, 3, 4, 5, 6).filter(e => e % 2 == 1) // 过滤出奇数
折叠
println(Array(2, 3, 4, 5, 6).reduce((a, b) => a + b)) // 折叠数组,求和
多维数组
创建多维数组
val arr5 = Array(
Array(1, 2, 3),
Array(4, 5, 6),
Array(7, 8, 9)
)
访问多维数组元素
println(arr5(2)(2)) // 访问第三行第三列的元素
println(arr5(1)(0)) // 访问第二行第一列的元素
由一维数组转化得到二维数组
val arr6 = Array(1, 2, 3, 4, 5, 6).grouped(3) // 将一维数组分组为二维数组
while (arr6.hasNext) {
val rs = arr6.next()
println(rs(0))
}
总结
Scala的数组操作非常灵活,无论是可变数组还是不可变数组,都提供了丰富的方法来处理数据。通过本文的介绍,相信读者对Scala数组的操作有了更深入的了解。在实际开发中,根据需要选择合适的数组类型和操作方法,可以大大提高编程效率和代码的可读性。
完整代码块一:
package Test11_18
import scala.collection.mutable.ArrayBuffer
// Array :数组
// 可修改的: ArrayBuffer
// 不可修改的: Array
object Test02 {
// 可修改的: ArrayBuffer
def main(args: Array[String]): Unit = {
// 1. 新建
val arr1 =ArrayBuffer(1,2,3)
// 2. 添加
arr1 += 4
arr1.insert(0,100)
// 3. 删除
arr1 -= 3 // 删除指定的元素
arr1.remove(0) // 删除制定位置(下表)的元素
// 4. 修改 通过下标来修改
arr1(0) = 50 // 把下标为0 的元素赋值为50
// 注意,下标不能越界。 有效范围是:0 - 长度-1
println(arr1.length)
println(arr1(1))
// 5. 查询
// 5.1 判断某个元素在数组中是否存在
println(s"50在数组中吗? ${arr1.contains(50)}")
// 5.2 找到制定元素的下标
// -1 : 表示这个元素在数组中不存在!
println(s"500在数组中的下标是: ${arr1.indexOf(500)}")
// 6. 遍历
// for foreach ,itertor
// for (i <- arr1) println(i)
// println("-"*50)
// arr1.foreach(println
// println("-"*50)
val it1 =arr1.iterator
while (it1.hasNext)
println(it1.next())
println("-"*50)
}
}
完整代码块一:
package Test11_18
// Array :数组
// 不可修改的: Array
object Test03 {
// 不可修改的: Array
def main(args: Array[String]): Unit = {
// 新建
val arr1 =Array(1,2,3,4,5,6)
// 数组的常用的方法(对于可变和不可变的数组都可以使用)
// 1. 截取 , 从源数组中, 取一部分 ,组成一个新的数组
// arr1.slice(起点下标,终点下标-不包括)
val arr2 =arr1.slice(2,5)
arr2.foreach(println)
// 2. 遍历.foreach
// 3. 映射 map
// Array(1,2,3) ----> Array(2,4,6)
val arr3 = Array(1,2,3).map(e => e * 2)
arr3.foreach(println) // (2,4,6)
// 过滤 filter
println("-"*20)
// 留下奇数,组成一个新的数组
val arr4 = Array(2,3,4,5,6).filter(e => e % 2 == 1)
arr4.foreach(println)
// 5. 折叠
println( Array(2, 3, 4, 5, 6).reduce((a,b) => a+b))
println("-" * 50)
// 多维数组
val arr5 = Array(
Array(1, 2, 3),
Array(4, 5, 6),
Array(7, 8, 9)
)
// 9
println(arr5(2)(2))
// 4
println(arr5(1)(0))
// 创建二维数组
// val arr6 = Array.ofDim[Int](3, 3, 3)
// arr6(0)(0)(0) = 1
// 由一维数组转化得到二维的数组
val arr6 = Array(1, 2, 3, 4, 5, 6).grouped(3) // 对数组中的元素,3个一组,升级为二维数组
while (arr6.hasNext) {
val rs = arr6.next()
println(rs(0))
}
}
}