Bootstrap

Scala 数组操作详解!!! #Scala #Scala数组

在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))
    }
  }
}

;