[Scala]Scala学习笔记二 数组
2017-07-25 13:41
204 查看
1. 定长数组
如果你需要一个长度不变的数组,可以使用Scala中的Array.val nums = new Array[Int](10) // 10个整数的数组 所有元素初始化为0 val strs = new Array[String](10) // 10个字符串的数组 所有元素初始化为null val s = Array("Hello", "World") // 长度为2的Array[String] 类型是推断出来的 s(0) = "GoodBye" // Array("GoodBye","World")备注已提供初始值时不要使用
new,例如上面的数组s使用
()而不是
[]来访问元素在JVM中,Scala的Array以Java数组方式实现.
2. 变长数组
对于那种长度按需要变化的数组,Java有ArrayList.Scala中等效数据结构为ArrayBuffer.import scala.collection.mutable.ArrayBuffer val b = ArrayBuffer[Int]() // 或者 new ArrayBuffer[Int]() 创建一个空的数组缓冲来存放整数\ b += 1 // ArrayBuffer(1) 用+=在尾端添加元素 b += (1,2,3,5) // ArrayBuffer(1,1,2,3,5) 在尾端添加多个元素 b ++= Array(8, 13, 21) // ArrayBuffer(1,1,2,3,5,8,13,21) 用++=操作追加任何集合 b.trimEnd(5) // ArrayBuffer(1,1,2) 移除最后5个元素可以在任意位置插入或移除元素,但这样的操作不如在尾端添加或移除元素操作那么高效:
b.insert(2,6) // ArrayBuffer(1,1,6,2) 在下标2之前插入 b.insert(2,7,8,9) // ArrayBuffer(1,1,7,8,9,6,2) 插入任意多的元素 b.remove(2) // ArrayBuffer(1,1,8,9,6,2) 删除下标2的元素 b.remove(2,3) // ArrayBuffer(1,1,2) 第二个参数的含义是要移除多少个元素有时需要构建一个Array,但不知道最终需要装多少元素.这种情况下可以先构建一个数组缓冲,然后调用:
b.toArray // Array(1,1,2)
3. 遍历数组和数组缓冲
使用for循环遍历数组和数组缓冲:val b = Array(6,5,4,3,2,1) for(i <- 0 until b.length){ println(i + "-" + b(i)) }输出结果:
0-6 1-5 2-4 3-3 4-2 5-1备注until 是RichInt类的方法,返回所有小于(但不包括)上限的数字如果想要每两个元素一跳,可以让i这样来进行遍历:
val b = Array(6,5,4,3,2,1) for(i <- 0 until (b.length, 2)){ println(i + "-" + b(i)) }输出结果:
0-6 2-4 4-2如果要从数组的尾端开始:
val b = Array(6,5,4,3,2,1) for(i <- (0 until b.length).reverse){ println(i + "-" + b(i)) }如果在循环体中不需要用到数组下标,我们也可以直接访问数组元素:
for(elem <- b){ println(elem) }
4. 数组转换
从一个数组(数组缓冲)出发,以某种方式对它进行转换是很简单的.这些转换操作不会修改原是数组,而是产生一个全新的数组:val a = Array(1,2,3,4) val result = for(elem <- a) yield 2 * elem // result 是Array(2,4,6,8)
for(...) yield循环创建了一个类型与原实际和相同的新集合.新元素为yield之后的表达式的值,每次迭代对应一个.当你遍历一个集合时,如果只想处理满足特定条件的元素.可以通过for中的if来实现:
val a = Array(1,2,3,4) val result = for(elem <- a if elem % 2 == 0) yield 2 * elem上面实例中对每个偶数元素翻倍,并丢掉奇数元素.
5. 常用操作
5.1 sum
val a = Array(6,1,7,4) a.sum // 18要使用sum方法,元素类型必须是数值类型:整型,浮点数或者BigInteger/BigDecimal
5.2 min max
val a = Array(6,1,7,4) a.min // 1 a.max // 7min和max输出数组或数组缓冲中最小和最大的元素
5.3 sorted
val a = Array(6,1,7,4) val asorted = a.sorted // Array(1, 4, 6, 7) val a = ArrayBuffer(6,1,7,4) val asorted = a.sortWith(_ > _) // ArrayBuffer(7, 6, 4, 1)sorted方法将数组或数组缓冲排序并返回经过排序的数组或数组缓冲,不会修改原始数组.可以使用sortWith方法提供一个比较函数.
5.4 mkString
val a = Array(6,1,7,4) a.mkString(" and ") // 6 and 1 and 7 and 4如果想要显示数组或者数组缓冲的内容,可以使用
mkString,允许指定元素之间的分隔符
val a = Array(6,1,7,4) a.mkString("<", ",", ">") // <6,1,7,4> 该方法的另一个重载版本可以让你指定前缀和后缀
相关文章推荐
- scala学习笔记之数组
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
- Scala学习笔记(六)----数组,循环,排序
- Scala学习笔记-数组相关操作
- Scala学习笔记一之基础语法,条件控制,循环控制,函数,数组,集合
- scala学习笔记2 数组
- Scala学习笔记--第4章 Scala数组
- Scala入门学习笔记三--数组使用
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
- Spark学习使用笔记 - Scala篇(2)- 数组
- Scala学习笔记(二)--数组、列表、元祖和scala脚本编写及读取文件
- scala学习笔记(三)数组
- Scala学习笔记之 --- Array、ArrayBuffer以及遍历数组(1)
- Scala学习笔记02【数组、列表、元组、集合和映射】
- Scala入门学习笔记三--数组使用
- Scala学习笔记:数组操作与简单算法示例
- Scala学习笔记03_数组
- Scala学习笔记--数组
- 【Scala学习笔记】类型参数化数组
- 快学Scala学习笔记及习题解答(1-4基础、控制、函数、数组、元组和映射)