您的位置:首页 > 其它

Scala学习笔记--数组

2015-08-21 23:25 316 查看
对于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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: