scala中的array

27 阅读3分钟

一:Array的定义

Array 是一种在 Scala 中用于存储固定大小、相同类型元素的数据结构。它在内存中是连续存储的,这使得访问元素的速度非常快。

类型有两种:Array表示长度不可变的数组 和 ArrayBuffer表示长度可变的数组

二:不可变数组

Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素。

我们主要学习它的一些常规操作:创建数组,访问元素,填充Array.range

1. 创建不可变数组

2. 访问元素: 注意不要越界。

3. 获取数组的长度:arr.length:获取数组的长度。

array与list区别:

array:有序数组,在空间上连续,通过下标访问元素特别快

list:有序链表,在空间上不连续

1. 添加元素

(1) 添加一个元素;+= 元素

(2) 添加多个元素;+=(元素1, 元素2)

2. 删除元素

(1) 删除一个元素: -= 元素

(2) 删除多个元素: -= (元素1, 元素2)

(3) 删除指定位置的元素: remove(下标)

(4) 删除指定位置的多个元素:remove(下标起点,下标终点)

package array

object array02 {
  def main(args: Array[String]): Unit = {
    val sc = Array.range(2,10,1)//2,10:数组范围,1:间隔
    println(sc(1))
    sc.foreach(println)
    //println(sc(10) -----报错,数组越界
    println("----------")
    val sc1 = scala.collection.mutable.ArrayBuffer(1,2,3)
    sc1 += 4//(1,2,3,4)
    sc1 += (5,6,7)//(1,2,3,4,5,6,7)
    sc1 -= 4//(1,2,3,5,6,7)
    sc1.remove(0,3)//0:从指定位置开始删除,2:删除几位
    //(5,6,7)
    sc1(2) = 8//(5,6,8)
    println(sc1.contains(6))//判断6是否存在
    println(sc1.contains(7))//判断7是否存在
    sc1.foreach(s =>println(s))
    println(sc1.sum)//求和:5+6+8 = 19
  }

}

输出结果:

image.png 1. 映射(Map)。arr.map(f):对数组中的每个元素应用函数f,并返回一个新的不可变数组。

2. 过滤(Filter)。任务搜索

3. 搜索和比较

   -arr.indexOf(elem):返回元素elem在数组中的第一个索引。

   -arr.contains(elem):检查数组是否包含元素elem。

4. 切片(Slice)

    arr.slice(from, until):返回数组的一个子数组,从索引from开始直到索引until(不包括until)。

package array

object array02 {
  def main(args: Array[String]): Unit = {
    val sc = Array.range(2,10,1)//2,10:数组范围,1:间隔
    println(sc(1))
    sc.foreach(println)
    //println(sc(10) -----报错,数组越界
    println("----------")
    val sc1 = scala.collection.mutable.ArrayBuffer(1,2,3)
    sc1 += 4//(1,2,3,4)
    sc1 += (5,6,7)//(1,2,3,4,5,6,7)
    sc1 -= 4//(1,2,3,5,6,7)
    sc1.remove(0,3)//0:从指定位置开始删除,2:删除几位
    //(5,6,7)
    sc1(2) = 8//(5,6,8)
    println(sc1.contains(6))//判断6是否存在
    println(sc1.contains(7))//判断7是否存在
    val sc2 = sc1.sortWith((a,b)=>a>b)//sortWith:排序,从大到小
    val sc3 = sc1.slice(0,2)//slice:切片,只取数组中的某个部分 --sc3 =>(5,6)
    val sc4 = sc1.filter(x => x>5)//filter:过滤数组
    val sc5 = 8
    val sc6 = sc1.indexOf(sc5)//indexOf:求该元素在数组中的下标
    sc1.foreach(s =>println(s))
    println("----------")
    sc2.foreach(s =>println(s))
    println("----------")
    sc3.foreach(s =>println(s))
    println("----------")
    sc4.foreach(s =>println(s))
    println("----------")
    println(s"${sc5}的下标为${sc6}")
    println("----------")
    println(sc1.sum)//求和:5+6+8 = 19
  }

}