转载自: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)
- }