Scala学习笔记--数组

对于Scala来说,数组是一块相当总要的内容,因此掌握是十分重要的。
数组分为两种:定长数组(Array) 变长数组(Arraybuffer)
Array:
//10个整数的数组,所有元素的初始化为0
val nums = new ArrayString

//长度为2的Array[String]--类型是推断出来的
//注:已提供初始值就不需要new了
val s = Array("hello","Spark")

Arraybuffer:
import scala.collection.mutable.ArrayBuffer
//或者是new ArrayBuffer[Int] 一个空的数组缓冲,准备存放整数
val b = ArrayBufferInt
//ArrayBuffer[1],+= 表示在尾端添加一个
b += 1
b += (1,2,3,4)
//++= 操作符追加任何集合
b ++= Array(8,13,21)
//移除最后5个元素
b.trimEnd(5)
//在下标为2之前插入一个6
b.insert(2,6)
//在下标为2之前插入:7,8,9
b.insert(2,7,8,9)
//把下标为2的删除
b.remove(2)
//从下标为2向后删除3个
b.remove(2,3)
1>循环遍历
格式:
for(i <- 0 until a.length)
println(a(i)) //> null
还可以这样
for(elem <- a)
println(elem)
2>数组转换
val a = Array(2,3,5,7,11) //> a : Array[Int] = Array(2, 3, 5, 7, 11)
val result = for(elem <- a) yield 2*elem //> result : Array[Int] = Array(4, 6, 10, 14, 22)
for(…)yield循环可以创建出来一个新的数组,也不会修改原有的数组
//如果你在遍历的时候只想把满足条件的筛选出来,可以通过守卫实现,就是在for中添加if实现
for(elem <- a if(elem %2 == 0))yield 2*elem

//而在生成情况下是:
a.filter(_ % 2 == 0).map(2*_)

//注意:元素的类型必须是数值类型:要么是整型,要么是浮点数或是BigInteger/BigDecimal
Array(1,7,2,9).sum               //> res0: Int = 19
ArrayBuffer(1,7,2,9).sum         //> res1: Int = 19

//此时是字符串,进行max操作的时候是看那个字符串最长
ArraryBuffer("Mary","had","a","little","lamb").max //little

sorted方法将数组或数组缓冲排序并返回经过排序的数组或数组缓冲,这个过程不会修改原始版本:
val b = ArraryBuffer(1,7,2,9)
val bSorted = b.sorted(_ < _)//b没有被改变,bSorted是ArraryBuffer(1,2,7,9)
val bSorted = b.sorted(_ > _)//b没有被改变,bSorted是ArraryBuffer(9,7,2,1)

如果想要显示数组或数组缓冲的内容,可以使用mkString方法,它允许你指定元素之间的分隔符。
a.mkString(" and ")
//"1 and 2 and 7 and 9"
a.mkString("<",",",">")
//"<1,2,7,9>"
多维数组 Array[Array[Double]] 可以使用ofDim方法:
val matrix = Array.ofDim[Double](3,4)//3行,4列
//比如想访问第二行,第三列
matrix(1)(2) = 42
//创建不规则的数组,每一行的长度个不相同
val triangle = new Array[Array[Int]](10)
    for(i <- triangle)
        triangle(i) = new Array[Int](i + 1)

你可能感兴趣的:(scala)