1.数组定义
一般数组定义:
val array = new Array[Int](5)
Scala中可这样定义:
val array = Array(1,2,3,4,5) //1.直接通过Array类名并传入参数的方式来创建数组实例,在背后的实现是调用Array的工厂方法模式apply来构建出数组及数组的内容的 2.在这里可以去掉[Int]这个泛型类型,是因为Scala有类型推到的能力,而我们已经传进了当前数组Array的值,所以可以根据值来推导出类型;
也可这样定义:
val array = Array.apply(1,2,3,4,5) //用括号传递给变量一个或多个参数时,Scala会把它转换成对apply()方法的调用
2.数组访问
数组访问时从下标0开始,到length-1结束。值得注意的是Scala中的访问方式和Java、C#中不同
int i =array(0) //Scala中访问数组元素
int i =array[0] //java和c#中访问数组元素
3.数组遍历
for(em<-array) println(em)
for(i<-0 until array.length) println("i"+a(i)) //until是RichInt类的方法,返回所有小于(不包括)上限的数字
4.可变数组ArrayBuffer
因为数组长度是不可变的,而我们在实际开发工作中,经常会需要数组长度与内容可变,因此便可用ArrayBuffer来实现
Scala中的ArrayBuffer相当于Java中的ArrayList,因此许多方法也是一样的
ArrayBuffer中的常用方法:
val arrayBuffer = ArrayBuffer[Int]()
1) 添加元素 insert
arrayBuffer += 3
arrayBuffer += (4,5,6,7,8,9,10)
arrayBuffer ++= Array(1,2,3) //元素都追加在数组末尾
arrayBuffer.insert(arrayBuffer.length - 1, 100,1000) //可指定位置追加元素,第一个参数为指定添加元素的位置,第二个参数为所添加的元素值(可以是一个,也可以是多 个)
2)删除元素 remove
arrayBuffer.remove(arrayBuffer.length -2) //删除指定位置的元素
3)获取最大值
arrayBuffer.max //数组也可用
4)获取最小值
arrayBuffer.min //数组也可用
5)获取数组中元素之和
arrayBuffer.sum //数组也可用
6)升序
arrayBuffer.sorted(_<_)
7)降序
arrayBuffer.sorted(_>_)
8)反转
arrayBuffer.reverse
9)转为数组
arrayBuffer.toArray
5.for(...)yield
如果想在已经有的数组的基础上通过作用于每个元素来生成新的元素构成的新数组,则可以通过yield语法来完成
for(...)yield 循环创建了一个类型与原始集合相同的新集合。如果从数组出发,则会得到一个新的数组;如果从数组缓冲出发,则会得到一个新的数组缓冲
val arrayAddedOne = for(item <- array) yield item + 1 //将数组中的每个元素都加一,并返回新数组
val arrayEven = for(item <- array if item % 2 == 0) yield item //返回数组中能被2整除的元素所组成的新数组
6.filter
通过filter可根据条件过滤元素,效果与for(...)yield类似
val b=a.filter { _%2==0 }.map { 2*_ }
等价于
val result= for(em<-a if em%2==0) yield em*2
7.mkString
指定分隔符,可根据需求分割数组元素,数组和缓冲数组都可用
array.filter { x => x % 2 == 0}.mkString(" ") //以空格位分隔符