Scala Array&ArrayBuffer
Scala Array&ArrayBuffer
1.定长数组-Array
//方式一
//长度为5的整数数组,所有元素初始化为0
val ary1=new Array[Int](5)
//长度为5的字符串数组,所有元素初始化为null
val ary2=new Array[String](5)
//方式二
//长度为2的数组,数据类型自动推断出来,已经提供初始值就不需要new关键字
val ary3= Array("zhangsan","lisi")
//
val ary4= Array(1 to 10 :_*);
println("数组的元素:"+ary1(0))
//赋值
ary1(0)=11
println("改变后数组的元素:"+ary1(0))
- 数组中的常用方法
val numbers = Array(1, 2, 3, 4) //声明一个数组对象
val first = numbers(0) // 读取第一个元素
numbers(3) = 100 // 替换第四个元素为100
val biggerNumbers = numbers.map(_ * 2) // 所有元素乘2
val a = Array(1,2)
val b = Array(3,4)
val c = a ++ b
//c中的内容是(1,2,3,4)
val a = Array(1, 2, 3,4,4,5,6,6)
val c = a.distinct
println(c.mkString(",")) // 1,2,3,4,5,6
mkString的使用
var array=Array(1 to 10 : _ *)
println(array.mkString)
println(array.mkString(","))
println(array.mkString("(",",",")"))
结果:
12345678910
1,2,3,4,5,6,7,8,9,10
(1,2,3,4,5,6,7,8,9,10)
// 数组元素求和
val a = Array(1, 2, 3, 4, 5)
val sum = a.sum
// 获取数组最大值
val max = a.max
//获取数组最小值
val min = a.min
// 对数组进行排序
scala.util.Sorting.quickSort(a)
// toString函数
a.toString
b.toString
2.ArrayBuffer-变长数组
- 如果不想每次都使用全限定名,则可以预先导入ArrayBuffer类
import scala.collection.mutable.ArrayBuffer
//变长数组ArrayBuffer
var numArrayBuffer = new ArrayBuffer[Int]();
// 使用+=操作符,可以添加一个元素,或者多个元素
// 这个语法必须要谨记在心!因为spark源码里大量使用了这种集合操作语法!
numArrayBuffer += 1
numArrayBuffer += (2, 3, 4, 5)
// 使用++=操作符,可以添加其他集合中的所有元素
numArrayBuffer ++= Array(6, 7, 8, 9, 10)
// 使用insert()函数可以在指定位置插入元素
// 但是这种操作效率很低,因为需要移动指定位置后的所有元素
numArrayBuffer.insert(5, 6)
numArrayBuffer.insert(6, 7, 8, 9, 10)
// 使用remove()函数可以移除指定位置的元素
numArrayBuffer.remove(1)
numArrayBuffer.remove(1, 3)
// Array与ArrayBuffer可以互相进行转换
numArrayBuffer.toArray
numArrayBuffer.toBuffer
// 使用trimEnd()函数,可以从尾部截断指定个数的元素
numArrayBuffer.trimEnd(5)
3.数组遍历
for (i <- 0 until numArrayBuffer.length)
println(numArrayBuffer(i))
// 跳跃遍历Array / ArrayBuffer
for(i <- 0 until (numArrayBuffer.length, 2))
println(numArrayBuffer(i))
// 从尾部遍历Array / ArrayBuffer
for(i <- (0 until numArrayBuffer.length).reverse)
println(numArrayBuffer(i))
// 使用“增强for循环”遍历Array / ArrayBuffer
for (e <- numArrayBuffer)
println(e)
4. Array和Arraybuffer之间的转换
scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer
scala> val a = ArrayBuffer[Int]()
a: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
scala> a.to
to toIndexedSeq toList toSeq toString
toArray toIterable toMap toSet toTraversable
toBuffer toIterator toParArray toStream toVector
scala> a.toArray
res31: Array[Int] = Array()
scala>
数组间的转换不会修改原数组,而是产生一个新的数组.
5.多维数组
scala> val matrix = Array.ofDim[Double](2,3)
matrix: Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0), Array(0.0, 0.0, 0.0))
scala> for(i <- 0 to 1 ;j <- 0 to 2){
| matrix(i)(j) = i+j
| }
scala> for(i <- 0 to 1 ;j <- 0 to 2){
| print(matrix(i)(j) +" ")
| }
0.0 1.0 2.0 1.0 2.0 3.0