首页 > 其他分享 >Scala 的Array 和 ArrayBuffer 集合

Scala 的Array 和 ArrayBuffer 集合

时间:2024-11-25 16:59:09浏览次数:9  
标签:数组 Scala ArrayBuffer arr1 println Array

  下面主要对Array和ArrayBuffer这两种相对应的集合进行介绍,通过可变数组与多维数组的理论知识结合相关案例深入分析Array和ArrayBuffer的应用。

1. Scala 的 Array

  Scala的Array表示长度不可变的数组,Array与Java中的大部分功能相同。Scala中的Array[T]对应 Java中的TU],例如Array[String]对应Stringl]。Scala的Array与Java中的不同点为Scala中的Array可以作为序列使用,通过隐式转换的方式把Scala中的数组转换成序列。

Scala中定义数组的四种方式如下: 

第一种方式:new Array[T](n)。T表示定义数组的类型,n表示指定数组的长度。

第二种方式:Array。例如定义 Array(1,2,3)数组。 

第三种方式:利用数组中的方法。例如可以使用Rang填充数组。

第四种方式:其他集合转换。例如List.toArray表示把List集合转换成数组。

2.Scala的ArrayBuffer

Scala中的ArrayBuffer定义方式同样有多种,这里主要介绍两种。

第一种方式:ArrayBuffer。

第二种方式:new ArrayBuffer。

  当定义一个不可变数组时会传递一个数组的长度,表示数组长度不可变。当定义可变数组时,可以不传递数组的长度,Scala会分配一个默认的长度。当长度不够时,ArrayBuffer还会自动扩展。一般情况下会指定一个初始长度,对数组进行预判。

关于可修改的ArrayBuffer,相关代码如下:

import scala.collection.mutable.ArrayBuffer
//Array:数组
//可修改的:ArrayBuffer
//不可修改的:Array
object Test {
  //可修改的: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)//length 长度,用来获取元素的个数
    //println(arr1(10)) //IndexOutOfBoundsException
    //5.查询
    //5.1 判断某个元素在数组中是否存在
    println(s"50在数组中吗? ${arr1.contains(50)}")
    //5.2 找到指定元素的下标
    //     -1:表示这个元素在数组中不存在!
    println(s"500在数组中的下标是: ${arr1.indexOf(500)}")
    //6.遍历
//    for,foreach,iterator
    for(i <- arr1) println(i)
    println("-"*50)
    arr1.foreach(println)
    println("-"*50)
    val it1 = arr1.iterator
    while (it1.hasNext){
      println(it1.next())
    }
  }
}

关于不可变的Array,相关代码如下:

object Test {
  //不可变Array:长度不可变
  def main(args: Array[String]): Unit = {
    val arr1 = Array(1,2,3,4,5,6)
    arr1(0) = 100
//    arr1.foreach(println)

    //数组的常用方法(对于可变和不可变的数组都可以使用)
    //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)
    //4.过滤 filter
    println("_"*50)
    //留下奇数,组成一个新的数组
    val arr4 = Array(2,3,4,5,6).filter(e => e%2==1)
    arr4.foreach(println)
    //5.折叠 reduce
    println(Array(1,2,3,4).reduce((a,b)=>a+b))

    println("_"*50)
    }
  }

3.Scala的多维数组

  Scala中定义多维数组的方式为ofDim方法和Array(Array1,Array2,..,Arrayn)方法。使用ofDim方法时需要传递参数,即Array.ofDim(x,y),表示传递一个x行y列的数组。通过Array(Array1,Array2,..,Arrayn)方式可以静态地把数组中的元素定义为数组,例如Array(Array(0,2),Array(3,4))。动态添加多维数组时需要使用var定义数组。 

下面举例说明Scala的数组和多维数组的常用操作。

相关代码如下:

object Test {
  def main(args: Array[String]): Unit = {
    //多维数组
    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))
    }
  }

标签:数组,Scala,ArrayBuffer,arr1,println,Array
From: https://blog.csdn.net/2301_81748087/article/details/143861304

相关文章

  • 11.25Scala
    案例:统计成绩1.按行读入文件importscala.io.Source//案例:统计成绩objectdd1{defmain(args:Array[String]):Unit={//1.按行读入文valsource=Source.fromFile("score.txt")valit=source.getLines()//迭代器it.next()//跳过第一行......
  • 11.21Scala
    importjava.io.PrintWriterimportscala.io.Sourceobjectddd1{defmain(args:Array[String]):Unit={//读入文件内容valcontent=Source.fromFile("dd.txt").mkStringprintln(content)//2.把字符串拆分为一个一个的单词,保存到数组//正则......
  • [Javascript] Is Array? Symbol.toStringTag
    Duringthepast,thiswasaworkingsolutionfunctionisArray(obj){returnObject.prototype.toString.call(obj)==='[objectArray]'} Butnowitdoesn'tworkanymore,thereasonisbecauseES6hasabuilt-inSymbol:constobj={[......
  • 使用Scala语言实现基本图像识别
    Scala是一种静态类型、函数式和面向对象的编程语言,它运行在JVM上,并且与Java高度兼容。Scala语言在数据处理和并发编程方面非常强大,下面是使用Scala语言实现Sobel边缘检测的代码示例。代码实现为了实现图像处理,我们将使用javax.imageio.ImageIO类来读取和保存图像,同时使用java.aw......
  • CF1763C Another Array Problem
    CF1763CAnotherArrayProblem题目大意:有一个数列\(a\),每次操作可以选择两个位置\(i,j(1\lei<j\len)\),然后把所有位置\(k(i\lek\lej)\)的值\(a_k\)变成\(|a_i-a_j|\)。问若干次操作后,序列的和的最大值为多少?思路:序列的和的最大值可以在所有数都等于原序......
  • 深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
    目录深入理解JavaScript中的Array.find()方法:原理、性能优势与实用案例详解一、引言:为什么要使用Array.find()二、Array.find()的使用与技巧1、基础语法2、返回值3、使用技巧三、Array.find()的优势与实际应用案例1、利用返回引用的优势修改数据2、查找嵌套数据......
  • Java中的List集合:从ArrayList到CopyOnWriteArrayList
    目录1.List接口简介2.ArrayList2.1基本特性2.2内部实现2.3扩容机制2.4性能考虑2.5代码示例3.LinkedList3.2内部实现3.3性能考虑3.4代码示例4.Vector4.1特性4.2与ArrayList的比较4.3代码示例5.Collections.synchronizedList5.1特性5.2实现原理5.3使......
  • JS中使用new Array()与使用Array.from()方式创建二维数组的性能比较
    比较1,单次创建小额数组:1.通过newArray()方式functiont(){console.time();newArray(100).fill().map(()=>newArray(10));console.timeEnd();} 执行5次耗时:0.078125ms0.050048828125ms0.0380859375ms0.031005859375ms0.093017578125ms2.......
  • Scala 的trait
     在Scala中,trait是一种特殊概念。trait可以作为接口,同时也可以定义抽象方法。类使用extends继承trait,在Scala中,无论继承类还是继承trait都用extends关键字。在Scala中,类继承trait后必须实现其中的抽象方法,实现时不需要使用override关键字,同时Scala支持多重继承trait,使用with......
  • Scala的高阶函数
    高阶函数作用:把其他函数当做参数或返回值defmain(args:Array[String]):Unit={//定义数组,Array(1,2,3,4)vararr=Array(10,22,13,54)//定义一个数组有4个元素//println(arr(2))//获取第一个元素//遍历for(i<-arr)......