1、定长数组
val nums = new Array[Int](10)//10个整数的数组,所有元素初始化为0
val s = Array("hello","world")//长度为2,类型由Scala自行推断,因为给了初始值,所以不用写new
s(0) = "google" //元素的访问使用()而不是[]
2、变长数组:数组缓冲
对于变长数组,Scala中的等效结构是ArrayBuffer
import scala.collection.mutable.ArrayBuffer
val b = ArrayBuffer[Int]()//或者不写()改用new ,此处表示一个空的数组缓冲,准备存放整数
b+=1 //使用+=在尾端添加元素
b+=(1,2,3,4,5,6) //在尾端添加多个元素,以括号包起来
b++=Array(8,12,13) //可以用++=操作符在后面追加任何集合
b.trimEnd(5) //移除最后5个元素
b.insert(2,6) //在下标2之前插入
b.insert(2,1,2,3,1,3) //在下标2前插入多个元素
b.remove(2) //移除下标为2的元素
b.remove(2,3)//移除下标2开始的3个元素
b.toArray(1,1,2) //此做法为当不确定自己要构建的Array要装多少个元素时,可以先使用ArrayBuffer,然后在转换为Array
//同理,也可以使用a.toBuffer将一个数组a转化为一个数组缓冲
注意:在任意位置插入或者移除元素并不高效
3、遍历数组和数组缓冲
用for魂环遍历数组或者数组缓冲for(i <- 区间)
for(i<- 0 until a.length)//until类似于to,但是不包含a.length
println(s"$i:${a(i)}")//s开头,字符串可以包含表达式但不能有格式化指令,拓展:row开头不会求值转义字符
设置每一步的步长
0 until a.length by 2//得到的结果是Range(0,2,4,6,8)
若想重尾端开始遍历,则设置步长为-1
0 until a.length by -1
不使用数组下标,直接访问数组元素
for(elem <- a)
println(elem)
4、数组转换
在Scala中,以某种方式对它进行转换是很简单的,这些转换操作不会修改原始数组,而是创建一个全新的数组。
val a = Array(2,3,5,7,11)
val result = for(elem<-a) yield 2 *elem
还可以在循环中添加守卫
for(elem <-a if elem % 2 ==0) yield 2*elem
但是通常会使用另一种写法
a.filter(_ % 2==0).map(2 * _)//可以用{}代替()
前面所述均是创建了一个新的数组,如若要修改原来的数组(获取数组的下标序列可以使用indices)
val positionToRemove = for(i<-a.indices if a(i) <0 )yields i
for(i <-positionToRemove.reverse) a.remove(i)
//另一种更好的方式是将要的元素复制到前面,然后截取指定个数的元素
5、常用算法
max,min,sum,sorted,sortedWith(),qucikSort()
mkString("<",",",">")//分别表示前缀,分隔符,后缀
6、解读Scaladoc
暂时不做过多解释
7、多维数组
创建一个Array[Array[Double]]类型的数组
val matrix = Array.ofDim[Double](3,4)//三行四列
//访问元素的方式:martix(row)(column) = 42
若要创建不规则的数组
val trangle = Array[Array[Int]](10)
for(i<-trangle.indices)
trangle(i) = new Array[Int](i+1)
8、与Java的互操作
Java的String[]数组可以被传入一个预期Java的Object[]数组的方法,但是Scala并不允许这样的自动转换。
如果你想调用一个带Object[]数组的方法,需要手动进行类型转换
val a = Array("dadas","dasdad","assda","dadadas")
java.util.Arrays.binarySearch(a.asInstanceOf[Array[Object]],"breef")
此部分为表示清楚
博客主要介绍了Scala中数组的相关知识,包括定长数组、变长数组(数组缓冲),讲述了数组和数组缓冲的遍历、转换方法,还提及常用算法、多维数组创建。此外,说明了Scala与Java在数组类型转换上的差异,调用带Object[]数组的方法需手动转换。
602

被折叠的 条评论
为什么被折叠?



