Scala 数组相关操作

快学Scala习题解答—第三章 数组相关操作 3 数组相关操作  3.1 编写一段代码,将a设置为一个n个随机整数的数组,要求随机数介于0(包含)和n(不包含)之间  random和yield的使用  Scala代码   import scala.math.random      def randomArray(n:Int)={     for(i 0 until n) yield (random * n). 阅读详情

一、定长数组

在 Scala 中,如果你需要一个长度不变的数组,可以使用 Array。但需要注意以下两点:

  • 在 Scala 中使用 (index) 而不是 [index] 来访问数组中的元素,因为访问元素,对于 Scala 来说是方法调用,(index) 相当于执行了 .apply(index) 方法。
  • Scala 中的数组与 Java 中的是等价的,Array[Int]() 在虚拟机层面就等价于 Java 的 int[]。
// 10 个整数的数组,所有元素初始化为 0
scala> val nums=new Array[Int](10)
nums: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

// 10 个元素的字符串数组,所有元素初始化为 null
scala> val strings=new Array[String](10)
strings: Array[String] = Array(null, null, null, null, null, null, null, null, null, null)

// 使用指定值初始化,此时不需要 new 关键字
scala> val a=Array("hello","scala")
a: Array[String] = Array(hello, scala)

// 使用 () 来访问元素
scala> a(0)
res3: String = hello

二、变长数组

在 scala 中通过 ArrayBuffer 实现变长数组 (又称缓冲数组)。在构建 ArrayBuffer 时必须给出类型参数,但不必指定长度,因为 ArrayBuffer 会在需要的时候自动扩容和缩容。变长数组的构建方式及常用操作如下:

import scala.collection.mutable.ArrayBuffer

object ScalaApp {
    
  // 相当于 Java 中的 main 方法
  def main(args: Array[String]): Unit = {
    // 1.声明变长数组 (缓冲数组)
    val ab = new ArrayBuffer[Int]()
    // 2.在末端增加元素
    ab += 1
    // 3.在末端添加多个元素
    ab += (2, 3, 4)
    // 4.可以使用 ++=追加任何集合
    ab ++= Array(5, 6, 7)
    // 5.缓冲数组可以直接打印查看
    println(ab)
    // 6.移除最后三个元素
    ab.trimEnd(3)
    // 7.在第 1 个元素之后插入多个新元素
    ab.insert(1, 8, 9)
    // 8.从第 2 个元素开始,移除 3 个元素,不指定第二个参数的话,默认值为 1
    ab.remove(2, 3)
    // 9.缓冲数组转定长数组
    val abToA = ab.toArray
    // 10. 定长数组打印为其 hashcode 值
    println(abToA)
    // 11. 定长数组转缓冲数组
    val aToAb = abToA.toBuffer
  }
}

需要注意的是:使用 += 在末尾插入元素是一个高效的操作,其时间复杂度是 O(1)。而使用 insert 随机插入元素的时间复杂度是 O(n),因为在其插入位置之后的所有元素都要进行对应的后移,所以在 ArrayBuffer 中随机插入元素是一个低效的操作。

三、数组遍历

object ScalaApp extends App {

  val a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

  // 1.方式一 相当于 Java 中的增强 for 循环
  for (elem <- a) {
    print(elem)
  }

  // 2.方式二
  for (index <- 0 until a.length) {
    print(a(index))
  }

  // 3.方式三, 是第二种方式的简写
  for (index <- a.indices) {
    print(a(index))
  }

  // 4.反向遍历
  for (index <- a.indices.reverse) {
    print(a(index))
  }

}

这里我们没有将代码写在 main 方法中,而是继承自 App.scala,这是 Scala 提供的一种简写方式,此时将代码写在类中,等价于写在 main 方法中,直接运行该类即可。

四、数组转换

数组转换是指由现有数组产生新的数组。假设当前拥有 a 数组,想把 a 中的偶数元素乘以 10 后产生一个新的数组,可以采用下面两种方式来实现:

object ScalaApp extends App {

  val a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

  // 1.方式一 yield 关键字
  val ints1 = for (elem <- a if elem % 2 == 0) yield 10 * elem
  for (elem <- ints1) {
    println(elem)
  }

  // 2.方式二 采用函数式编程的方式,这和 Java 8 中的函数式编程是类似的,这里采用下划线标表示其中的每个元素
  val ints2 = a.filter(_ % 2 == 0).map(_ * 10)
  for (elem <- ints1) {
    println(elem)
  }
}

五、多维数组

和 Java 中一样,多维数组由单维数组组成。

object ScalaApp extends App {

  val matrix = Array(Array(11, 12, 13, 14, 15, 16, 17, 18, 19, 20),
    Array(21, 22, 23, 24, 25, 26, 27, 28, 29, 30),
    Array(31, 32, 33, 34, 35, 36, 37, 38, 39, 40))


  for (elem <- matrix) {

    for (elem <- elem) {
      print(elem + "-")
    }
    println()
  }

}

打印输出如下:
11-12-13-14-15-16-17-18-19-20-
21-22-23-24-25-26-27-28-29-30-
31-32-33-34-35-36-37-38-39-40-

六、与Java互操作

由于 Scala 的数组是使用 Java 的数组来实现的,所以两者之间可以相互转换。

import java.util

import scala.collection.mutable.ArrayBuffer
import scala.collection.{JavaConverters, mutable}

object ScalaApp extends App {

  val element = ArrayBuffer("hadoop", "spark", "storm")
  // Scala 转 Java
  val javaList: util.List[String] = JavaConverters.bufferAsJavaList(element)
  // Java 转 Scala
  val scalaBuffer: mutable.Buffer[String] = JavaConverters.asScalaBuffer(javaList)
  for (elem <- scalaBuffer) {
    println(elem)
  }
}
【大数据Scala系列】Scala 数组相关操作 阅读详情

相关推荐

【冷冻电镜】RELION5.0使用教程总结

对于您自己的数据,您可能希望使用各种倾斜系列对齐方法,然后比较每种方法生成的断层扫描图像的质量(参见下一步)。通过检查 CtfFind job 的 tilt_series 目录中的star文件来检查几个倾斜系列的散焦值。GitHub上也有人反应这个问题,目前我的解决方案是下载了较低版本的CTFFIND的,降级到4.1.10可以成功运行。此外,logfile.pdf 文件包含所有显微照片的有用参数图,例如散焦、像散、估计分辨率等,以及整个数据集中这些值的直方图。的目录,以及指向此目录的符号链接。

进阶中的程序员吃吃的博客 4238

Scala 系列(四)—— 数组 Array

一、定长数组 在 Scala 中,如果你需要一个长度不变的数组,可以使用 Array。但需要注意以下两点: 在 Scala 中使用 (index) 而不是 [index] 来访问数组中的元素,因为访问元素,对于 Scala 来说是方法调用,(index) 相当于执行了 .apply(index) 方法。 Scala 中的数组与 Java 中的是等价的,Array[Int]() 在虚拟机...

weixin_30362083的博客 368

使用pytorch构建LSTM_AE模型的两种方式

2.基本LSTM_Unit计算——基本LSTM_AE结构 3.自定义LSTM_Unit计算——自定义LSTM_AE结构 1.LSTM-Encoder-Decoder模型结构及简要解析 图基本lstm计算单元

qq_37840762的博客 7275

Scala的Array方法

增: 集合之间合并类 ++ ++:/union +=增加一个string类型的集合,常用于map/元组/ArrayBuffer[T] var m=Map(“a”->1);m+=(“j”->0) 集合增加元素 +: :+ padTo 后补齐 删: 集合去除元素 drop 去除前n个 dropRight dropWhile 改: 集合修改 patch update/updated 取值: 集合取值(单个、头尾、部分) apply head/headOption 返回集合第一个元素 tail 取出

aosimth的博客 896

ESP32-S3 USB下载模式深度解析:从UART0到TinyUSB的硬件设计与避坑指南

本文深度解析ESP32-S3的三种USB下载模式:UART0、Hardware CDC和基于TinyUSB的USB-OTG CDC。详细探讨各模式的硬件设计要点、电平异常问题、eFuse配置及避坑指南,帮助开发者优化设计,提升量产效率和系统稳定性。

gold的博客 1290

GraphRAG + Ollama 本地化部署实战:从零搭建知识图谱问答系统

本文详细介绍了如何在本地部署GraphRAG与Ollama,搭建一个完全自主可控的知识图谱问答系统。通过逐步指导环境配置、项目初始化、核心设置修改以及源码适配,成功将GraphRAG从依赖云端OpenAI API转向本地Ollama服务,并选用qwen2.5:7b和nomic-embed-text模型。该方案有效解决了数据隐私与持续API成本问题,特别适合中小企业构建内部知识库或智能客服系统。

x2y3z4a5b的博客 919

scala003_数组常见操作

1 数组元素求和 scala> val a = Array(1,2,3,4,5) a: Array[Int] = Array(1, 2, 3, 4, 5) scala> val sum = a.sum sum: Int = 15 2 获取数组最大值 scala> val max = a.max max: Int = 5 3 对数组进行排序 scala> scala.u...

weixin_44133661的博客 416

深入解析Docker Overlay2磁盘空间占用问题及高效清理策略

本文深入解析了Docker Overlay2存储驱动导致磁盘空间占用的核心原因,包括镜像与容器残留、日志文件膨胀、应用层泄漏及驱动特性。提供了从全局检查到精准定位的完整排查方法,并给出了从常规清理到配置优化的多维度高效清理策略,帮助用户从根本上解决Docker磁盘空间问题。

data3的博客 900

arraybuffer操作_Scala 数组操作之Array、ArrayBuffer以及遍历数组

本文将要为您介绍的是Scala 数组操作之Array、ArrayBuffer以及遍历数组,教程操作步骤:ArrayBuffer在Scala中,如果需要类似于Java中的ArrayList这种长度可变的集合类,则可以使用ArrayBuffer。// 如果不想每次都使用全限定名,则可以预先导入ArrayBuffer类import scala.collection.mutable.ArrayBuffer...

weixin_39873356的博客 481

基于 ESP32 的分布式光伏微电网智能监控系统设计与实现

设备 / 模块连接 ESP32 引脚备注I2C 总线(SDA)GPIO21所有 I2C 设备共用I2C 总线(SCL)GPIO22所有 I2C 设备共用DS18B20(单总线)GPIO18单总线通信,需外接 4.7K 上拉电阻有源蜂鸣器GPIO19低电平触发,串联 100Ω 限流电阻ESP32 供电5V/GND由 LM2596 输出 5V 供电,或直接 USB 供电(调试阶段)INA219(光伏)光伏阵列正负极接 INA219 的 VIN+/VIN-

weixin_42300449的博客 304

腾讯Android开发面试准备指南及参考答案

腾讯元宝高级Android开发职位面试准备指南 该职位要求扎实的Kotlin基础、架构设计能力和性能优化经验,重点关注Android客户端开发。面试流程约3轮,支持线上面试,流程较快。候选人需准备以下核心内容: 基础技术:Kotlin特性、Android开发生命周期、多线程编程 架构设计:MVVM/MVI模式应用、组件化解耦方案 性能优化:流畅度提升、内存管理、启动时间优化等实战案例 加分技能:Jetpack Compose开发、音视频处理、跨平台开发经验 建议结合项目经验准备具体案例,突出技术深度和问题解

郑伟强dev的专栏 1194

第5章 Scala基本数据结构---ArrayBuffer

本文来自艾叔编著的《零基础快速入门Scala》免费电子书,添加文末艾叔微信,获取完整版的PDF电子书 5.2 ArrayBuffer Array的大小在声明时就已经固定了,后续是无法改变的。如果Array的大小需要变化(主要是增大),可以使用ArrayBuffer。 1.声明ArrayBuffer 例子代码如下,首先引入ArrayBuffer所需的package。 scala> import scala.collection.mutable.ArrayBuffer 声明一个ArrayB..

嵌入式快车 1174

Codex 100个真实案例 - 用AI自动生成API测试用例(接口测试全覆盖)

API 测试是保障后端质量的关键环节,但手写测试用例既枯燥又容易遗漏。本案例将展示如何用 Codex 从 Swagger/OpenAPI 规范文档自动生成 pytest 测试用例——包括正常流程测试、边界值测试、异常参数测试、性能压力测试,还能自动生成 Mock 数据和精美的 HTML 测试报告。全程自然语言驱动,让 API 测试覆盖率从 0 飙到 90%+!

yueyeguzhuo的专栏 271

Scala数组相关操作

摘要 本篇主要学习如何在Scala中操作数组。Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素。在Scala中,我们的选择更多,不过现在我们先假定不关心其他选择,而只是想马上开始用数组。 本篇的要点包括: 1. 若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer 2. 提供初始值时不要使用new 3. 用()来访问元素 4. ...

someby的博客 2614

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Scala之数组相关操作

一、​​​​​​​定长数组和变长数组 package cn.lxk.scala import scala.collection.mutable.ArrayBuffer object ArrayDemo { def main(args: Array[String]) { //初始化一个长度为8的定长数组,其所有元素均为0 val arr1 = new Array[Int]...

lixinkuan的博客 1119

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Scala数组相关的操作

数组这一章需要注意的要点是: 若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer 提供初始值时不要使用new 用()来访问元素 用for(elem <- arr)来遍历元素 用for(elem <- arr if …) … yield … 来将原数组转型为新数组 Scala数组和Java数组可以互操作;用ArrayBuffer,使用scala.collection.JavaC

积微致著 3197

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Scala - 数组相关操作

数组相关操作 定长数组 不变数组。使用Scala中的Array. val nums = new Array[Int](10) //初始化为0 val a = new Array[String](10) //初始化为null val s = Array("Hello","World") //长度为2的Array[String] - 类型是推断出来的。说明:当已提供初始值时,就不需要new了 s(0) = "Goodbye" // 使用()而不是[]来访问元素 Jvm中,Scala的Array以Java数组方

qq_29342297的博客 427

三、Scala数组相关操作

一、定长数组 val nums = new Array[Int](10)//10个整数的数组,所有元素初始化为0 val s = Array("hello","world")//长度为2,类型由Scala自行推断,因为给了初始值,所以不用写new s(0) = "google" //元素的访问使用()而不是[] 二、变长数组:数组缓冲 对于变长数组,Scala中的等效结构是ArrayBuffer import scala.collection.mutable.ArrayBuffer val b = Arr

Cxf2018的博客 343

《快学Scala》第三章 数组相关操作

本文转自博客园xingoo的博客,原文链接:《快学Scala》第三章 数组相关操作,如需转载请自行联系原博主。 ...

weixin_34113237的博客 87

一起学scala--数组相关操作

你将学到如何在scala中操作数组,还将会学到数组的一些常用函数。

yoletPig的博客 255

scala数组相关操作

object ArrayOperate extends App { /** * 定长数组 */ val nums = new Array[Int](10) //10个整数的数组,所有元素初始化值为0 //访问数组元素用() println(nums(1)) //返回值为 0 val s = Array("Hello", "World")//...

weixin_34128839的博客 92

scala --数组相关操作

一,定长数组   Array定长数组,访问数组元素需要通过()   val nums = new Array[Int](10)   //长度为10的int数组 初始化为0   val strs = new Array[String](10)   //长度为10的String数组 初始化为null   val s = Array("hello","world") //初始化数组长度为2,不需

首席数据打杂官的博客 350

《快学Scala》第3章 数组相关操作 练习

1. 编写一段代码,将a设置为一个n个随机整数的数组,要求随机数介于0和n之间。

アリスの書架 920

Scala学习笔记-数组相关操作

1. 定长数组 如果需要一个长度不变的数组,可以使用scala中的Array。例如   val nums=new Array[Int](10) val s=Array("Hello","world") s(0)="GoodBye"  2. 变长数组:数组缓冲 对于长度需要变化的数组,Java有ArrayList,C++有vector。Scala中数据结构ArrayBuffer

蜗牛乔巴的博客 330
上一篇: Scala基本数据类型和运算符
下一篇: Scala Map & Tuple
Cynicism_Kevin
博客等级 码龄8年 97粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值