数组及元组
第3章 数组及元组
3.1 定长数组
定义长度不变的数组可以使用Array
Scala数组的底层实际上是Java数组。例如字符串数组在底层就是Java的String[],整数数组在底层就是Java的Int[]
val nums = new Array[Int](10)//生成10个整数的数组,所有元素初始化为0
val nums = new Array[String](10)//生成10个字符串的数组,所有元素初始化为null
val s = Array("hello", "world")//已提供初始值就不需要new了
s(0) = "good"//使用()而不是[]来访问元素
[Any]泛型表示该数组可以存放任意类型。
3.2 变长数组
如果需要类似于Java中的ArrayList这种长度可变的集合类,则可以使用ArrayBuffer。
+=或++=用于在数组尾端添加元素,当添加多个元素时已括号包起来
import scala.collection.mutable.ArrayBuffer
val b = ArrayBuffer[int]()//或new ArrayBuffer[int]
b += 1//添加一个元素
b += (2, 3)//添加多个元素
trimEnd()和remove()用于移除元素
trimEnd(a):是从数组尾开始移除a位元素
remove(a,(b)):删除脚标为a的元素,如果有b参数,就从脚标为a的元素开始删除b位元素
b.trimEnd(2)//移除最后2个元素
insert()插入元素
b.insert(1, 6)//在脚标为2的位置插入6
b.insert(2, 7, 8, 9)//在脚标为2的位置插入7,8,9
3.3 遍历
for(i <- 区间)会遍历该区间所有的值
(0 until a.length).reverse //从数组尾端开始遍历
for(elem <- 数组) //直接访问数组中的每个元素
3.4 数组转换
toArray和toBuffer用于数组与缓冲区相互转换
for(...)yield 用于创建一个和以前一样的数组或缓冲区
遍历一个数组时并处理符合条件的元素,例如:
for(elem <- a if elem % 2 == 0) yield 2 * elem
或
a.felter{ _ % 2 == 0} map {2 * _}
3.5 常用算法
sum方法用于数值型元素求和
min和max用于输出数组或缓冲区的最小和最大元素
sorted用于排序并返回经过排序的新数组
sorted(_ > _)从大到小排序
mkString方法在指定元素间的分隔符
val a = Array(1, 7, 2, 9)
a.mkString(" , ") //"1 , 7 , 2 , 9"
3.6 多维数组
可以用ofDim方法构建
val matrix = Array.ofDim[Double](3, 4)//3行4列的数组
访问其中的元素要用两个圆括号
matrix(row)(column) = 42
3.7 元组
元组是不同类型值的聚集,元组的值是通过单个的值包含在圆括号中构成,例如:
(1,3.14,“Fred”)
定义元组的方式
元组中最大只能有22个元素
获取元组方式:元组._1 或 元组 _1
试图通过一个类型参数来限定元组中所有
的元素的类型是错误的
3.8 拉链操作
将两个元组的值做对应的关联组成对偶的数组
val a = Array(0, 1, 2)
val b = Array("a", "b", "c")
val pairs = a.zip(b) //Array((0, "a"), (1, "b"), (2, "c"))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异