Scala函数式程序设计原理 week6 collections

集合特质


Seq是一个有先后次序的值的序列,比如数组或列表。IndexSeq允许我们通过整型的下标快速访问任意元素。
Set是一组没有先后次序的值。在SortedSet中,元素以某种排过序的顺序被访问。
Map是一组(键,值)对偶。SortedMap按照键的排序访问其中的实体。

集合类型定义的增删操作符

Iterable特质的重要方法


可变和不可变集合

Scala同时支持可变和不可变的集合。不可变的集合从不改变,因此你可以安全地共享其引用,甚至在一个多线程的应用程序中也没问题。
Scala优先采用不可变集合

序列

Vector

Vector是ArrayBuffer的不可变版本,一个带下标的序列,支持快速的随机访问。向量以树形结构的形式实现,每个节点可以有不超过32个子结点,对于一个有100万个元素的向量而言,只需4层结点。

Range

Range表示一个整数序列,Range对象并不存储所有值而是只有起始值,结束值和增值。
可以用to(包含末尾)和until(不含末尾)和by(步长)方法构造Range对象。

val r:Range = 1 until 5//1,2,34
val s:Range = 1 to 5//1,2,3,4,5
1 to 10 by 3 //1,4,7,10

Array和String

ArrayString支持和Seq相同的操作,可以隐式地转换成序列。(他们不能成为序列的子类,因为他们来组与Java)

val xs:Array[Int] = Array(1,2,3)
xs map (x => 2*x)
val ys: String = "Hello"
ys filter (_.isUpper)

可变列表

可变的LinkedList和不可变的List相似,可以通过对elem引用赋值来修改其头部,对next引用赋值来修改其尾部。

for循环表达式

集Set

集是不重复元素的集合。集是无序的。

映射Map

另一个基础集合类型是map.一个类型为Map[Key,Value]的数据结构。

查询映射

map.getOrElse(key,default_value)

更新映射

在可变映射中,可以更新映射的值,或者添加一个新的映射关系
scores(“Bob”) = 10

迭代映射

for ((k,v) <- 映射) 处理k和v

默认值

至今为止,映射是偏函数,一个并非对所有输入值都有定义的函数。withDefaultValue操作可以将一个映射转换成完全函数。

val cap1 = capitalOfCounry withDefaultValue "<unknown>"
cap1("abc")//"unkonwn"

全部评论

相关推荐

10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
vegetable_more_exercise:1-1.5万,没错啊,最少是1人民币,在区间内
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务