数组是一种不变的,可索引的数据集合
val arr = Array(1,2,3,4) //声明一个数组对象
//arr: Array[Int] = Array(1, 2, 3, 4)
val first = arr(0)//读取第一个元素
arr(3)=100//第三个元素
val newarr = arr.map(_ * 2) //所有元素乘2
println(newarr.mkString(",")) //打印数组,结果为:2,4,6,200
合并集合,并返回一个新的数组,新数组包含左右两个集合的内容
val a = Array(1, 2)
val b = Array(3, 4)
val c = a ++ b
println(c.mkString(","))
这个方法同上一个方法类似,两个加号后面多了一个冒号,但是不同的是右边操纵数的类型决定着返回结果的类型
val a = Array(1,2)
val b = scala.collection.mutable.ListBuffer(3,4)
val c = a++:b
println(c.getClass.getName)
在数组前面添加一个元素,并返回新的数组
val a = List(1, 2)
val b = 1 +: a
println(b.mkString)
在数组后面添加一个元素,并返回新的数组
val a = List(1, 2)
val b = a :+ 9
println(b.mkString)
对数组中所有的元素从左向右遍历,进行相同的迭代操作,foldLeft 的简写
val a = List(1,2,3,4)
val b = (10/:a)((x,y)=>x+y)//(10/:a)(_+_)
对数组中的所有元素从右向左遍历,进行相同的迭代操作,foldRight的简写
val a = List(1,2,3,4)
val b = (a:\10)(_-_)
println(b)
将数组中的元素逐个添加到 StringBuilder 中
将数组中的元素逐个添加到 StringBuilder 中,每个元素用 sep 分隔符分开
输出11,4,3,22 start 和 end 分别加在开头和结尾
val a = List(1,2,3,4)
val b = new StringBuilder()
a.addString(b)
a.addString(b,",")
a.addString(b,"1",",","2")
聚合计算 aggregate 是柯里化方法,参数是两个方法
def seq(m: Int, n: Int): Int = {
val s = "seq_exp = %d+%d"
println(s.format(m, n))
m + n
}
def combine(m: Int, n: Int): Int = {
val s = "com_exp =%d +%d"
println(s.format(m,n`
m+n
}
val a = List(1,2,3,4)
val b = a.aggregate(5)(seq,combine)
val c = a.par.aggregate(5)(seq,combine)
获取指定索引处的元素
val a = List(1,2,3,4)
val b = a.apply(1)//a.apply(i)同a(i)
println(b) //2
判断两个对象是否可以进行比较
val a = List()
val b = Array()
println(a.canEqual(b))//true
获取 index 索引处的字符,这个方法会执行一个隐式的转换,将 Array[T] 转换为 ArrayCharSequence,只有当 T 为 Char 类型时,这个转换才会发生
val chars = Array('a','b','c','d')
println(chars.charAt(2))//c
创建一个副本
val a = Array(1,2,3,4)
val b = a.clone()
print(b.mkString(","))//1,2,3,4
通过执行一个并行计算(偏函数),得到一个新的数组对象
在序列中查找第一个符合偏函数定义的元素,并执行偏函数计算
val fun: PartialFunction[Char, Char] = {
case 'a' => 'A'
case x => x
}
val a = Array('a', 'b', 'c','a')
val b = a.collect(fun)
println(b.mkString(","))//A,b,c
println(a.collectFirst(fun).mkString(","))//A
combinations 表示组合,这个排列组合会选出所有包含字符不一样的组合,但不考虑顺序,对于 “abc”、“cba”,视为相同组合,参数 n 表示序列长度,就是几个字符为一组
val a = Array('a','b','c')
val b = a.combinations(2)//返回一个迭代器
b.foreach(x=> println(x.mkString(",")))
//a,b
//a,c
//b,c
判断序列中是否包含指定对象
val a = List(1,2,3,4)
println(a.contains(1)) //true
判断当前序列中是否包含另一个序列
val a = List(1,2,3,4)
val b = List(2,3)
println(a.containsSlice(b))//true
将当前数组元素复制到另一个数组中
将当前数组元素复制到另一个数组中,从 start 位置开始复制
将当前数组元素复制到另一个数组中,从 start 位置开始复制,长度为 len
val a = Array(1,2,3)
val b:Array[Int] = new Array(5)
println(b.mkString(","))//0,0,0,0,0
a.copyToArray(b)
println(b.mkString(","))//1,2,3,0,0
a.copyToArray(b,1)
println(b.mkString(","))//0,1,2,3,0
a.copyToArray(b,1,2)
println(b.mkString(","))//0,1,2,0,0
将数组中的元素复制到 Buffer 中
val a = Array(1, 2, 3, 4)
val b: ArrayBuffer[Int] = ArrayBuffer()
a.copyToBuffer(b)
println(b.mkString(",")) // 1,2,3,4
判断两个序列的长度以及对应位置元素是否符合某个条件。如果两个序列具有相同的元素数量并且 p(x, y)=true,则返回 true
val a = Array(1,2,3,4)
val b = Array(2,3,4,5)
println(a.corresponds(b)(_<_))
//true
统计符合条件的元素个数
val a = Array(1,2,3,4)
println(a.count(x => x > 2))
//2
计算当前数组与另一个数组的差集,即将当前数组中没有在另一个数组中出现的元素返回
//diff
val a = Array(1,2,3,4)
val b = Array(2,3,4,5)
println(a.diff(b).mkString(","))
//1
去除当前集合中重复的元素,只保留一个
val a = Array(1, 2, 2, 3, 4, 4)
val b = a.distinct
println(b.mkString(",")) // 1,2,3,4
将当前数组中前 n 个元素去除,返回一个新数组
功能同 drop,去掉尾部的 n 个元素
去除当前数组中符合条件的元素,返回剩余的数组,这个需要一个条件,就是从当前数组的第一个元素起,就要满足条件,直到碰到第一个不满足条件的元素结束(即使后面还有符合条件的元素),否则返回整个数组
val a = Array(1, 2, 3, 4)
val b = a.drop(2)
println(b.mkString(","))
val c = a.dropRight(2)
println(c.mkString(","))
val d = a.dropWhile(x => x > 2)
val e = a.dropWhile(x => x < 2)
println(d.mkString(","))
println(e.mkString(","))
//3,4
//1,2
//1,2,3,4
//2,3,4
判断当前序列是否以某个序列结尾
val a = Array(1,2,3,4)
val b = 4
println(a.endsWith(Array.fill(1)(b)))
判断当前数组是否包含符合条件的元素
//exists
val a = Array(1,2,3,4)
println(a.exists(x => x > 3))
//true
取得当前数组中符合条件的元素,组成新的数组返回
//filter
val a = Array(1, 2, 3, 4)
val b = a.filter(x => x == 2)
println(b.mkString(","))
//2
查找第一个符合条件的元素,返回 Option
val a = Array(1,2,3,4)
println(a.find(_.>(3)))
//Some(4)
对当前序列的每个元素进行操作,结果放入新序列返回,参数要求是 GenTraversableOnce 及其子类
val a = Array("hello world","hello java","hello hao","hello hao nian java")
a.flatMap(_.split(" ")).map(x=>(x,1)).groupBy(_._1).map(x=>(x._1,x._2.length)).toList.sortBy(_._1).foreach(println)
扁平化处理
val a = Array(Array(1,2),Array(2,3),Array(3,4))
println(a.flatten.mkString(","))
//1,2,2,3,3,4
对序列中的每个元素进行二元操作,类似于agg,执行过程不同
def fun(m:Int,n:Int):Int={
val s = "seq_exp=%d+%d"
println(s.format(m,n))
m+n
}
val a = Array(1,2,3,4)
val b = a.fold(5)(fun) //不分区
println(b)
val c = a.par.fold(5)(fun)//分区
//seq_exp=5+1
//seq_exp=6+2
//seq_exp=8+3
//seq_exp=11+4
//15
//seq_exp=5+2
//seq_exp=5+4
//seq_exp=5+3
//seq_exp=5+1
//seq_exp=8+9
//seq_exp=6+7
//seq_exp=13+17
从左到右计算
从右到左计算
def fun(m: Int, n: Int): Int = {
val s = "seq_exp=%d+%d"
println(s.format(m, n))
m + n
}
val a = Array(1, 2, 3, 4)
val b = a.foldLeft(5)(fun)
val b = a.foldRight(5)(fun)
println(b)
//foldLeft
//seq_exp=5+1
//seq_exp=6+2
//seq_exp=8+3
//seq_exp=11+4
//foldRight
//seq_exp=4+5
//seq_exp=3+9
//seq_exp=2+12
//seq_exp=1+14
检测序列中的元素是否都满足p,如果序列为空,则返回true
val a = Array(1,2,3,4)
println(a.forall(_.>(0)))//true
println(a.forall(_.>(2)))//false
遍历序列中的所有元素,进行f操作
val a = Array(1,2,3,4)
a.foreach(x=>println(x*10))
//10
//20
//30
//40
按条件分组,条件由f匹配,返回值是Map类型,每个key对应一个分组
val a = Array(1, 2, 3, 4)
val b = a.groupBy(x => x match {
case x if x > 3 => "big"
case _ => "small"
})
b.foreach(x=>println(x._1+": "+x._2.mkString(",")))
//small: 1,2,3
//big: 4
将指定数组分组,每组有size个元素,返回一个迭代器
val a = Array(1,2,3,4)
val b = a.grouped(3).toList
b.foreach(x=>println("第"+(b.indexOf(x)+1)+"组"+x.mkString(",")))
//第一组 1,2,3
//第二组 4
检测序列是否具有有效的长度,对应Stream这样的流数据则返回false
val a = Array(1,2,3,4)
println(a.hasDefiniteSize)
//true
返回序列第一个元素,如果序列为空,将引发错误
val a = Array(1,2,3,4)
println(a.head)
//1
返回序列第一个元素的Option类型对象,如果序列为空,将返回None
val a = Array(1,2,3,4)
println(a.headOption)
//Some(1)
返回元素elem在序列中第一次出现的索引
返回元素elem在序列中第一次出现的索引,指定从索引from开始查找
val a = Array(1,2,3,4,1)
println(a.indexOf(1)) //0
println(a.indexOf(1, 1)) //4
检测当前序列中是否包含序列that,并返回第一次出现该序列的索引
检测当前序列中是否包含另一个序列that,指定从索引from开始查找,并返回第一次出现该序列的索引
val a = Array(1,2,3,2,3,4)
val b = Array(2,3)
println(a.indexOfSlice(b)) //1
println(a.indexOfSlice(b, 2)) //3
返回当前序列第一个出现满足条件p的元素的索引
返回当前序列第一个出现满足条件p的元素的索引,指定从索引from开始查找
val a = Array(1,2,3,4)
println(a.indexWhere(_.equals(2)))//1
println(a.indexWhere(x => x > 1, 2))//2
返回当前序列索引集合
val a = Array(1,2,3,4)
println(a.indices.mkString(","))
//0,1,2,3
返回当前序列中不包含最后一个元素的序列
val a =Array(1,2,3,4)
println(a.init.mkString(","))
//1,2,3
对集合中的元素进行init迭代操作,该操作的返回值中,第一个值是当前序列的副本,最后一个值为空,每一步都进行init操作,上一步的结果作为下一步的操作对象
val a = Array(1, 2, 3, 4)
// println(a.init.mkString(","))
val b = a.inits.toList
for (i <- 0 until b.length) {
val s = "第 %d 个值:%s"
println(s.format(i + 1, Option(b(i).mkString(","))))
}
//第 1 个值:Some(1,2,3,4)
//第 2 个值:Some(1,2,3)
//第 3 个值:Some(1,2)
//第 4 个值:Some(1)
//第 5 个值:Some()
提取两个集合的交集
val a = Array(1,2,3,4)
val b = Array(2,3,4,5)
a.intersect(b).mkString(",").foreach(print)
判断序列中是否存在指定索引
val a = Array(1,2,3,4)
println(a.isDefinedAt(1)) //true
println(a.isDefinedAt(4)) //false
判断序列时候为空
val a = Array(1, 2, 3, 4)
val b = Array[Int]()
println(a.isEmpty) //false
println(b.isEmpty) //true
判断序列是否可以反复遍历,该方法是GenTraversableOnce中的方法,对于Traversables一般返回true,对于Iterators返回false,除非被复写
val a = Array(1, 2, 3, 4)
println(a.isTraversableAgain) //true
生成当前序列的迭代器
val a = Array(1, 2, 3, 4)
val b = a.iterator
println(b.mkString(","))//1,2,3,4
返回序列的最后一个元素,如果序列为空,将引发错误
val a = Array(1,2,3,4)
println(a.last)//4
返回元素elem在序列中最后一次出现的索引
返回元素elem在序列中最后一次出现的索引,指定在索引end之前(包括)的元素中查找
val a = Array(1,2,3,4,1)
println(a.lastIndexOf(1)) //4
println(a.lastIndexOf(1, 3))//0
检测当前序列是否包含序列that,并返回最后一次出现该序列的索引
检测当前序列中是否包含序列that,并返回最后一次出现该序列的索引,指定在索引end之前(包括)的元素中查找
val a = Array(1, 2, 3, 4,1,2)
val b = ("a")
val c = Array(1,2)
println(a.lastIndexOfSlice(b)) //-1
println(a.lastIndexOfSlice(c)) //4
println(a.lastIndexOfSlice(c, 3)) //0
返回当前序列中最后一个满足条件p的元素的索引
返回当前序列中最后一个满足条件p的元素的索引,指定在索引end之前(包括)的元素中查找
val a = Array(1, 2, 3, 4,1,2)
println(a.lastIndexWhere(_.>(2)))
println(a.lastIndexWhere(_.>(2), 2))
返回序列的最后一个元素的Option类型对象,如果序列为空,则返回None
val a = Array(1, 2, 3, 4, 1, 2)
println(a.lastOption)//Some(2)
返回序列元素的个数
val a = Array(1, 2, 3, 4)
println(a.length)//4
比较序列的长度和参数 len,返回(序列的长度-len)
val a = Array(1, 2, 3, 4, 1, 2)
println(a.lengthCompare(3))
println(a.lengthCompare(6))
println(a.lengthCompare(10))
对序列中的元素进行 f 操作,返回生成的新序列
val a = Array(1, 2, 3, 4, 1, 2)
a.map(_.*(10)).mkString(",").foreach(print)
10,20,30,40,10,20
返回序列中最大的元素
val a = Array(1, 2, 3, 4, 1, 2)
println(a.max) //4
返回序列中符合条件的第一个元素
val a = Array(1, 2, 3, 4, 1, 2)
println(a.maxBy(_.>(2))) //3
返回序列中最小的元素
val a = Array(1, 2, 3, 4, 1, 2)
println(a.min) //1
返回序列中不符合条件的第一个元素
val a = Array(1, 2, 3, 4, 1, 2)
println(a.minBy(_.<(2))) //2
返回序列中所有元素拼接成一个字符串
返回序列中所有元素拼接成一个字符串,以 sep 作为元素间的分隔符
将序列中所有元素拼接成一个字符串,以 start 开头,以 sep 作为元素间的分隔符,以 end 结尾
val a = Array(1, 2, 3, 4, 1, 2)
println(a.mkString)
println(a.mkString(","))
println(a.mkString("start",",","end"))
判断序列是否不为空
val a = Array(1,2,3,4)
val b = new Array[Int](0)
println(a.nonEmpty)
println(b.nonEmpty)
填充序列,如果当前序列长度小于 len,那么新产生的序列长度是 len,多出的几个位值填充 elem,如果当前序列大于等于 len ,则返回当前序列
val a = Array(1, 2, 3, 4)
val b = a.padTo(10,scala.util.Random.nextInt(100))
println(b.mkString(","))
//1,2,3,4,73,73,73,73,73,73
返回一个并行实现,产生的并行序列不能被修改
val a = Array(1, 2, 3, 4)
val b = a.par
println(b.mkString(","))
//1,2,3,4
按条件将序列拆分成两个数组,满足条件的放到第一个数组,其余的放到第二个数组,返回的是包含这两个数组的元组
val a = Array(1, 2, 3, 4)
val b: (Array[Int], Array[Int]) = a.partition(_%2==0)
b._1.mkString(",").foreach(print)
println
b._2.mkString(",").foreach(print)
批量替换,从原序列的 from 处开始,后面的 replaced 个元素,将被替换成序列 that
val a = Array(1, 2, 3, 4)
val b = Array(36,7,9)
println(a.patch(1, b, 1).mkString(","))
permutations 表示排列,这个排列组合会选出所有排列顺序不同的字符组合,permutations 与 combinations 不同的是,相同的组合考虑排列,对于 “abc”、“cba”,视为不同的组合
val a = Array(1, 2, 3)
a.permutations.toList.foreach(x=> println(x.mkString(",")))
/*
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1*/
给定一个条件 p,返回一个前置数列的长度,这个数列中的元素都满足 p
val a = Array(1, 2, 3, 4)
println(a.prefixLength(x => x < 3)) // 2
返回所有元素乘积的值
val a = Array(1, 2, 3, 4)
println(a.product) // 1*2*3*4=24
同 fold,不需要初始值
def fun(m:Int,n:Int):Int={
val s = "seq_exp = %d + %d"
println(s.format(m, n))
m + n
}
val a = Array(1,2,3,4)
val b = a.reduce(fun)
println(b)
//seq_exp = 1 + 2
//seq_exp = 3 + 3
//seq_exp = 6 + 4
//10
同foldLeft,从左向右计算,不需要初始值
同 reduceLeft,返回 Option
同 foldRight,从右向左计算,不需要初始值
同 reduceRight,返回 Option
def fun(m:Int,n:Int):Int={
val s = "seq_exp = %d - %d"
println(s.format(m, n))
m - n
}
val a = Array(1,2,3,4)
println(a.reduceLeft(fun))
println(a.reduceLeftOption(fun))
println(a.reduceRight(fun))
println(a.reduceRightOption(fun))
/*
seq_exp = 1 - 2
seq_exp = -1 - 3
seq_exp = -4 - 4
-8
seq_exp = 1 - 2
seq_exp = -1 - 3
seq_exp = -4 - 4
Some(-8)
seq_exp = 3 - 4
seq_exp = 2 - -1
seq_exp = 1 - 3
-2
seq_exp = 3 - 4
seq_exp = 2 - -1
seq_exp = 1 - 3
Some(-2)*/
反转序列
val a = Array(1, 2, 3, 4)
val b = a.reverse
println(b.mkString(",")) // 4,3,2,1
生成反向迭代器
val a = Array(1, 2, 3, 4)
val b = a.reverseIterator
b.foreach(x => print(x + " ")) // 4 3 2 1
同 map,方向相反
al a = Array(1, 2, 3, 4)
val b = a.reverseMap(x => x * 10)
println(b.mkString(",")) // 40,30,20,10
判断两个序列是否顺序和对应位置上的元素都一样
val a = Array(1, 2, 3, 4)
val b = a.clone
val c = a.reverse
println(a.sameElements(b))//true
println(a.sameElements(c))//true
同 fold,scan 会把每一步的计算结果放到一个新的集合中返回,而 fold 返回的是最后的结果
val a = Array(1, 2, 3, 4)
val b = a.scan(5)(_ + _)
println(b.mkString(",")) // 5,6,8,11,15
同 foldLeft,从左向右计算,每一步的计算结果放到一个新的集合中返回
同 foldRight,从右向左计算,每一步的计算结果放到(从右向左放)一个新的集合中返回
val a = Array(1, 2, 3, 4)
val b = a.scanLeft(5)(_ + _)
val c = a.scanRight(5)(_ + _)
println(b.mkString(",")) // 5,6,8,11,15
println(c.mkString(",")) // 15,14,12,9,5
从序列的 from 开始向后查找,返回满足条件 p 的连续元素的长度,只返回第一个
val a = Array(1,2,3,4)
println(a.segmentLength(_.>(1), 1)) //3
产生一个引用当前序列的 sequential 视图
val a = Array(1, 2, 3, 4)
val b = a.seq
println(b.mkString(",")) // 1,2,3,4
返回序列元素个数,同 length
滑动,从第一个元素开始,每个元素和它后面的 size - 1 个元素组成一个数组,最终组成一个新的集合返回,当剩余元素个数不够 size 时,则结束
val a = Array(1, 2, 3, 4, 5)
a.sliding(3).toList.foreach(x=> println(x.mkString(",")))
//1,2,3
//2,3,4
//3,4,5
从第一个元素开始,每个元素和它后面的 size - 1 个元素组成一个数组,最终组成一个新的集合返回,当剩余元素个数不够 size 时,则结束。该方法可以设置步长 step,每一组元素组合完后,下一组从上一组起始元素位置 + step 后的位置处开始
val a = Array(1, 2, 3, 4, 5)
a.sliding(3,3).toList.foreach(x=> println(x.mkString(",")))
按指定的排序规则对序列排序
val a = Array(1,2,3,4)
println(a.sortBy(x => x).mkString(","))//从大到小
println(a.sortBy(x => -x).mkString(","))//从小到大
使用默认的排序规则对序列排序
val a = Array(3, 2, 1, 4)
val b = a.sorted // 默认升序排列
println(b.mkString(",")) // 1,2,3,4
将序列拆分成两个数组,从第一个元素开始,直到第一个不满足条件的元素为止,其中的元素放到第一个数组,其余的放到第二个数组,返回的是包含这两个数组的元组
val a = Array(1,3,2,4)
val b = a.span(_.<(2))
println(b._1.mkString(","))
println(b._2.mkString(","))
//1
//3,2,4
从指定位置开始,把序列拆分成两个数组(返回的是一个元组)
val a = Array(1, 2, 3, 4)
val b = a.splitAt(2)
println(b._1.mkString(",")) // 1,2
println(b._2.mkString(",")) // 3,4
判断序列是否以某个序列开始
val a = Array(1, 2, 3, 4)
val b = Array(1, 2)
println(a.startsWith(b)) // true
判断序列从指定偏移处是否以某个序列开始
val a = Array(1, 2, 3, 4)
val b = Array(2, 3)
println(a.startsWith(b, 1)) // true
返回 toString 结果的前缀
val a = Array(1, 2, 3, 4)
println(a.toString()) // [I@3ab39c39
println(a.stringPrefix) // [I
返回 start 和 end 间的字符序列,不包含 end 处的元素(仅用于字符数组)
序列求和,元素需为 Numeric[T] 类型
val a = Array(1, 2, 3, 4)
println(a.sum) // 10
返回当前序列中不包含第一个元素的序列
val a = Array(1, 2, 3, 4)
val b = a.tail
println(b.mkString(",")) // 2,3,4
同 inits,每一步都进行 tail 操作
val a = Array(1, 2, 3, 4)
val b = a.tails.toList
for (i <- 0 until b.length) {
val s = "第 %d 个值: %s"
println(s.format(i + 1, b(i).mkString(",")))
}
/**
* 第 1 个值: 1,2,3,4
* 第 2 个值: 2,3,4
* 第 3 个值: 3,4
* 第 4 个值: 4
* 第 5 个值:
*/
返回当前序列中,前 n 个元素组成的序列
val a = Array(1, 2, 3, 4)
val b = a.take(3)
println(b.mkString(",")) // 1,2,3
返回当前序列中,从右边开始,后 n 个元素组成的序列
val a = Array(1, 2, 3, 4)
val b = a.takeRight(3)
println(b.mkString(",")) // 2,3,4
返回当前序列中,从第一个元素开始,满足条件的连续元素组成的序列
val a = Array(1, 2, 3, 4)
val b = a.takeWhile(x => x < 3)
print(b.mkString(",")) // 1,2
将序列转换成 Array 类型
将序列转换成 Buffer 类型
将序列转换成 IndexedSeq 类型
将序列转换成可迭代的类型
将序列转换成迭代器,同 iterator 方法
将序列转换成 List 类型
将序列转转换成 Map 类型,需要被转化序列中包含的元素是 Tuple2 类型
将序列转换成 Seq 类型
将序列转换成 Set 类型
将序列转换成 Stream 类型
将序列转换成 Vector 类型
矩阵转置,二维数组行列转换
val a = Array(Array(1,2,3),Array(4,5,6),Array(7,8,9))
a.foreach(x=> println(x.mkString(",")))
println("---------------------------------------")
a.transpose.foreach(x=> println(x.mkString(",")))
/*
1,2,3
4,5,6
7,8,9
---------------------------------------
1,4,7
2,5,8
3,6,9
*/
合并两个序列,同操作符 ++
将含有两个二元组的数组,每个元组的第一个元素组成一个数组,第二个元素组成一个数组,返回包含这两个数组的元组
val chars = Array(("a", "b"), ("c", "d"))
val b = chars.unzip
println(b._1.mkString(",")) // a,c
println(b._2.mkString(",")) // b,d
将含有三个三元组的数组,每个元组的第一个元素组成一个数组,第二个元素组成一个数组,第三个元素组成一个数组,返回包含这三个数组的元组
val chars = Array(("a", "b", "x"), ("c", "d", "y"), ("e", "f", "z"))
val b = chars.unzip3
println(b._1.mkString(",")) // a,c,e
println(b._2.mkString(",")) // b,d,f
println(b._3.mkString(",")) // x,y,z
将序列中 i 索引处的元素更新为 x
将序列中 i 索引处的元素更新为 x,并返回替换后的数组
返回当前序列中从 from 到 until 之间的序列,不包括 until 处的元素
val a = Array(1, 2, 3, 4)
val b = a.view(1, 3)
println(b.mkString(",")) // 2,3
根据条件 p 过滤元素
val a = Array(1, 2, 3, 4)
val b = a.withFilter(x => x > 2).map(x => x)
println(b.mkString(",")) // 3,4
将两个序列对应位置上的元素组成一个元组数组,要求两个序列长度相同
val a = Array(1, 2, 3, 4)
val b = Array(4, 3, 2, 1)
val c = a.zip(b)
println(c.mkString(",")) // (1,4),(2,3),(3,2),(4,1)
同 zip ,但是允许两个序列长度不同,不足的自动填充,如果当前序列短,不足的元素填充为 thisElem,如果 that 序列短,填充为 thatElem
val a = Array(1, 2, 3, 4, 5, 6, 7)
val b = Array(5, 4, 3, 2, 1)
val c = a.zipAll(b, 8, 9) // (1,5),(2,4),(3,3),(4,2),(5,1),(6,9),(7,9)
println(c.mkString(","))
val x = Array(1, 2, 3, 4)
val y = Array(6, 5, 4, 3, 2, 1)
val z = x.zipAll(y, 8, 9) // (1,6),(2,5),(3,4),(4,3),(8,2),(8,1)
println(z.mkString(","))
序列中的每个元素和它的索引组成一个元组数组
val a = Array('a', 'b', 'c', 'd')
val b = a.zipWithIndex
println(b.mkString(",")) // (a,0),(b,1),(c,2),(d,3)