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著 电子工业出版社****************
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。