定义与使用列表
Scala 的列表(List)与数组非常相似,列表的所有元素都具有相同的类型。与数组不同的是,列表是不可变的,即列表的元素不能通过赋值进行更改。
定义列表时,需要写明列表元素的数据类型,具有类型个的元素的列表类型可写为 ListT.
或根据初值自动推断列表的数据类型。分别定义不同数据类型的列表,构造列表的两个基本单位是“Ni1”和“…:”。“Ni1”可以表示空列表;“…”称为中缀操作符,表示列表从前端扩展,遵循右结合。 Scala 中常用的査看列表元素的方法有 head、init、last、tail和 takeO)。其中 head 方法可查看列表的第一个元素,tail方法可查看第一个元素之后的其余元素,last可查看列表的最后一个元素,init 方法可査看除最后一个元素外的所有元素,take()方法可查看列表前n个元素。
如果需要合并两个列表,那么可以使用:()。但需要注意,“列表 1..:列表 2”与“列表 1…:(列表 2)”的结果是不一样的,对于前者,列表2的元素添加在列表1的后面;对于后者,列表2的元素添加在列表1的前面。合并两个列表还可以使用concat()方法。 用户可以使用 contains0)方法判断列表中是否包含某个元素,若列表中存在指定的元素则返回 true,否则返回 false。
定义与使用集合
集合(Set)是没有重复对象的,所有元素都是唯的,定义集合。Scala 也为集合提供了许多操作方法,常用的方法如表 2-6所示。Scala合并两个列表时使用的是::(0)或concat0方法,而合并两个集合使用的是++0方法,
定义与使用映射
映射(Map)是一种可迭代的键值对结构,所有值都可以通过键获取,并且映射中的键都是唯一的。另外映射还可以通过 keys 方法获取所有的键,通过values 方法获取所有值,也可以通过 isEmpty,方法判断映射的数据是否为空。映射对象 person 是否为空,若不为空则获取 person 所有的键和值。
定义与使用元组
元组(Tuple)是一种类似于列表的结构,但与列表不同的是,元组可以包含不同类型的元素。元组的值是通过将单个的值包含在圆括号中构成的。
例如,定义一个元组,元组中包含3个元素,对应的类型分别为(Int,Double,String)。
用户还可以通过定义元组,其中“Tuple3”中的3代表的是3元组即元组中包含3个元素,若定义的是n元组,则将“Tuple3”改为“Tuplen”。 目前,Scala 支持的元组最大长度为22,即 Scala 元组最多只能包含 22 个元素。访问元组元素可以通过“元组名称,元素索引”进行,索引从1开始。访问定义的元组t中的第1个元素与第3个元素。
使用函数组合器
Scala 为各种数据结构提供了很多函数组合器,函数组合器的参数都是一个函数,运用函数组合器的操作会对集合中的每个元素分别应用一个函数。以列表为例,介绍常用的函数组合器的用法。 1.map()方法可通过一个函数重新计算列表中的所有元素,并且返回一个包含相同数目元素的新列表。例如,定义一个 Int 类型列表,列表中的元素为 1~5,使用 map()方法对列表中的元素进行平方计算。
2.foreach()方法和 map()方法类似,但是 foreach()方法没有返回值,只用于对参数的结果进行输出。例如,使用 foreach0)方法对 num 中的元素进行平方计算并输出。
3.flter()方法可以移除传人函数的返回值为 false 的元素。例如,过滤列表 num 中的奇数,得到只包含偶数的列表。
4.flatten()方法可以将嵌套的结构展开,即fatten0方法可以将一个二维的列表展开成一个一维的列表。定义一个二维列表 list,通过 flatten0方法可以将 list 展开为一维列表。 5.fatMap()方法结合了map0方法和 fatten0方法的功能,接收一个可以处理嵌套列表的函数,再对返回结果进行连接。
6.groupBy()方法可对集合中的元素进行分组操作,返回的结果是一个映射。对1~10根据奇偶性进行分组,因此 groupBy()方法传人的参数是一个计算偶数的函数,得到的结果是个映射,包含两个键值对,键为 false 对应的值为奇数列表,键为 true 对应的值为偶数列表。