Scala数组操作

Scala数组操作:

1.定长数组

长度不变的数组的声明:
//长度为10的整数数组,所有元素初始化为0
 val numArr = new Array[Int](10)

//长度为10的字符串数组,所有元素初始化为null
val numArr = new Array[String](10)

//长度为2的数组,数据类型自动推断出来,已经提供初始值就不需要new关键字
val s = Array("cai","yong")

//通过ArrayName(index)访问数组元素和更改数组元素
val s = Array("cai","yong")
 println(s(0))
s(0) = "haha"
println(s(0))
输出:
cai
haha

2.变长数组:数组缓冲

Scala也支持长度变化的数组,支持的数据结构是ArrayBuffer
//一个空的数组缓冲,准备存放整数
 val ab = ArrayBuffer[Int]()
 val ab2 = new ArrayBuffer[Int]

//用+=在尾部添加元素
ab += 2

//在尾部添加多个元素
ab += (1,2,3,4,5)

//通过++=往数组缓冲后面追加集合
 ab ++= Array(6,7,8,9)

//使用trimEnd(n)移除尾部n个元素
ab.trimEnd(3)

//在下标3之前插入元素
ab.insert(3, 33)

//插入多个元素,第一个值为index,后面所有的值为要插入的值
ab.insert(3,3,4,5,6)

//移除某个位置的元素
ab.remove(3)

//移除从下标为n开始(包括n)的count个元素
ab.remove(n, count)

        有时候需要构造一个Array,但是不知道具体要存放多少元素,可以先构造ArrayBuffer,再调用toArray方法转化成Array,同样,对Array调用toBuffer方法可以转成ArrayBuffer.

注:在数组缓冲的尾部进行元素添加移除操作的效率很高,但是在任意位置插入或移除元素的效率并不太高效,因为涉及到数组元素的移动。


3.遍历数组

//for循环遍历
for(i <- 0 until ab.length){
 print(ab(i) + ", ")
 }

//根据特定步长遍历数组
for(i <- 0 until (ab.length, 2)){
 print(ab(i) + ", ")
 }

//从数组的尾部开始向前遍历数组
for(i <- (0 until ab.length).reverse){
 print(ab(i) + ", ")
}

//类似于Java中的foreach遍历数组
 for(elem <- ab){
 print(elem + ", ")
}

4.数组转换

//进行数组转换会生成一个新的数组,而不会修改原始数组
 val change = for(elem <- ab) yield elem * 2
for(elem <- change){
print(elem + ", ")
 }

//添加一个守卫的数组转换
val change = for(elem <- ab if elem%2 == 0) yield elem * 2

5.数组操作常用算法

//sum求和(数组与阿奴必须是数值型数据)
println(change.sum)

//min max 输出数组中最小和最大元素
println(change.min)
println(change.max)

//使用sorted方法对数组或数组缓冲进行升序排序,这个过程不会修改原始数组
 val sortArr = ab.sorted 
 for(elem <- sortArr)
 print(elem + ", ")

//使用比较函数sortWith进行排序
val sortArr = ab.sortWith(_>_)

//数组显示
 println(sortArr.mkString("|"))
 println(sortArr.mkString("startFlag","|","endFlag"))

6.多维数组

//构造一个2行3列的数组
val arr = Array.ofDim[Int](2,3)
println(arr.length)
println(arr(0).length)
arr(0)(0) = 20
println(arr(0)(0))

//创建长度不规则的数组
val arr = new Array[Array[Int]](3)
      
 for(i <- 0 until arr.length){
arr(i) = new Array[Int](i + 2)
}
      
for(i <- 0 until arr.length){
println(arr(i).length)
}



*****************以上内容摘自:《快学Scala》  [美]Cay S. Horstmann著   电子工业出版社****************





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值