Scala:Array
Scala 语言中提供的数组是用来存储固定大小的同类型元素,数组对于每一门编辑应语言来说都是重要的数据结构之一。
声明数组变量并不是声明 number0、number1、…、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、…、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。
数组的第一个元素索引为0,最后一个元素的索引为元素总数减1。
同时,Scala提供了大量的集合操作:
1、数组比较(地址比较)
var a1 = Array(1,2,3)
var a2 = Array("Tom","Jack","Mary")
println(a1==a2)
println(a1 != a2)码片
2、数组合并:++
var a1 = Array(1,2,3)
var a2 = Array("Tom","Jack","Mary")
var a3 = a1++a2
a3.foreach(println)
3、头部追加/尾部追加:+: / :+
var a1 = Array(1,2,3)
var a2 = Array("Tom","Jack","Mary")
var a3 = 5+:a1
var a4 = a2:+"Ming"
a3.foreach(println)
a4.foreach(println)
4、从左向右累加 / 从右向左累加 :
/:(过期用foldleft代替)
😕(过期用foldright代替)
var a1 = Array(1,2,3)
println(a1.foldLeft(10)((x,y)=>{println(s"$x\t$y");x+y}))
println(a1.foldRight(10)((x,y)=>{println(s"$x\t$y");x+y}))
5、将数组拼接成字符串:addString
var a1 = Array(1,2,3)
var builder = new mutable.StringBuilder
a1.addString(builder,"[",",","]")
println(builder)
6、聚合函数 aggregate
arr.aggregate(initValue)(mapCal,reduceCal)
map端聚合mapCal生效,不走reduce端reduceCal失效
arr.par…aggregate(initValue)(mapCal,reduceCal)
par产生分区,mapcal->reduceCal
var a1 = Array(1,2,3)
val add = (x:Int,y:Int) =>{
var z = x+y
println(s"$x + $y = $z")
z
}
println(a1.aggregate(0)(add, add))
println(a1.par.aggregate(0)(add,add))
7、addThen / compose
f1和f2只有一个参数且类型相同,f1的输出为f2的输入
先调用f1,再调用f2
先调用f2,再调用f1
var a1 = Array(1,2,3)
val add = (x:Int) =>{
println("add")
x+10
}
val mul = (x:Int) =>{
println("mul")
x*6
}
def rst = add andThen mul
def rst1 = add compose mul
println(rst(2))
println(rst1(2))
8、根据索引取元素 : apply
var a1 = Array(1,2,3)
var a2 = Array("Tom","Jack","Mary")
var t = a1.apply(0)
var t2 = a2.apply(2)
println(t)
println(t2)
9、applyOrElse
根据下标取数组元素,如果越界,则返回默认值
第二个参数为偏函数
var a1 = Array(1,2,3)
var a2 = Array("Tom","Jack","Mary")
println(a1.applyOrElse(10,{i:Int => "NONE"}))
println(a2.applyOrElse(1,{i:Int => "NONE"}))
10、两个集合之间是否可以比较 : canEqual
var a1 = Array(1,2,3)
var a2 = Array("Tom","Jack","Mary")
println(a1.canEqual(a2))
11、克隆一个数组的副本:clone
var a1 = Array(1,2,3)
var a3 = a1.clone()
a3.foreach(println)
12、collect / collectFirst
收集一个弹性分布式数据集的所有元素到一个数组中
var a1 = Array(1,2,3,6,7,8)
a1.collect({case i if(i%2==0)=>i}).foreach(println)
println()
a1.collectFirst({case i if(i%2==0)=>i}).foreach(println)
13、combinations(n)
排序组合,不考虑顺序
n任意选择集合中n个元素进行组合
var a1 = Array(1,2,3)
a1.combinations(2).foreach(x=>{x.foreach(print);println()})
14、permutations
所有顺序不同顺序的排列
var a1 = Array("a","b","c")
a1.permutations.foreach(x=>println(x.mkString(",")))
15、contains(n)
集合中是否包含元素n
var a1 = Array("a","b","c")
println(a1.contains("a"))