Scala 为Array提供了丰富的高阶方法,支持函数式编程风格,常用如下:
| 方法 | 作用 | 示例 |
|---|---|---|
map | 对每个元素执行转换,返回新 Array | arr.map(_ * 2) → Array(200, 40, 60) |
filter | 过滤符合条件的元素,返回新 Array | arr.filter(_ > 50) → Array(100) |
foreach | 遍历并执行副作用操作(无返回值) | arr.foreach(println) |
reduce | 聚合元素(从左到右),返回单个值 | arr.reduce(_ + _) → 200+20+30=250 |
fold | 带初始值的聚合,返回单个值 | arr.fold(10)(_ + _) → 10+200+20+30=260 |
sortBy | 按指定规则排序,返回新 Array(原数组不变) | arr.sortBy(identity) → 升序排列 |
sorted | 按元素自身排序(默认升序),返回新 Array | arr.sorted → Array(20, 30, 100) |
reverse | 反转数组,返回新 Array | arr.reverse → Array(30, 20, 100) |
take/drop | 取前 n 个元素 / 丢弃前 n 个元素,返回新 Array | arr.take(2) → Array(100, 20) |
exists | 判断是否存在符合条件的元素,返回 Boolean | arr.exists(_ == 30) → true |
forall | 判断所有元素是否符合条件,返回 Boolean | arr.forall(_ |
(三)可变数组
Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素。
1. 新建。要先导入 ArrayBuffer。 可变的数据结构都需要额外导入
2. 访问修改。数组名(下标)=新值。
3. 添加元素
(1) 添加一个元素;+= 元素
(2) 添加多个元素;+=(元素1, 元素2)
4. 删除元素
(1) 删除一个元素: -= 元素
(2) 删除多个元素: -= (元素1, 元素2)
(3) 删除指定位置的元素: remove(下标)
(4) 删除指定位置的多个元素:remove(下标起点,下标终点)
package array
object array01 {
//Array: 可变,不可变
// 不可变
// scala.Array
// 可变
//scala.collection.mutable.ArrayBuffer
def main(args: Array[String]): Unit = {
val arr1 = scala.Array(1,2,3)
//arrr1 += 4; 不可变数组,不可添加
val arr2 = scala.collection.mutable.ArrayBuffer(1,2,3)
arr2 += 4 //可变数组,可以添加元素
println(arr2)
}
}
(四)数组常用方法
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)。
(五)多维数组
最典型的多维数组就是二维数组,类似于表格。有两种定义方式:
直接定义: Array.ofDim(x,y)
从一维数组转化得来: 数组. grouped()