Scala实战理解之集合

来源:互联网 发布:颜色搭配知乎 编辑:程序博客网 时间:2024/05/21 17:00

一,集合list[T]

[T]表示泛型,Scala会进行类型推导,所以一般没有必要显示指定类型T

使用list的一些例子

1,定义一个list a

2”::” 连接操作符,左边为元素,右边为list,将元素添加进list成新的list b

 

3,”::” 连接操作符,先”z”连接Nil,”y”连接”zNil,以此类推。

 

等同于下:

4“:::”连接符,连接两个listIntString的公共类型为Any(值类型和引用类型公共类型为Any)

 

5List.head方法

 

6List.tail方法

 

7,判断函数isEmpty

 

8,递归遍历函数

 

9Fiter高阶函数

 

可以看到,filter函数的参数为一个匿名函数,输入参数x代表的就是列表里面的一个元素,filter会遍历列表中每一个元素,把每一个元素都去套用传递进来的匿名函数的判定条件,如果满足匿名函数的条件,返回值为True就保留这个元素,否则就抛弃这个元素。

10toList函数

toList函数将字符串转换成list。之后可以用filter保留其中的数值:


11takewhile接受返回值为TrueFalse的函数作为参数。当为True的时候就继续取数,当不满足的时候就停止取数。


可以看到,takewhile会遍历列表中每一个元素,把每一个元素都去套用传递进来的匿名函数的判定条件,如果满足匿名函数的条件,返回值为True就继续取数,否则就终止这个取数。

12map函数

map函数主要用来做元素的转换或映射

看例子

 

map函数里面传入匿名函数,输入参数x代表列表里面的每一个成员,对于这个成员,将其大写。

map函数用来把列表里面每一个元素进行映射的高阶函数,接受的参数为一个函数,作为参数的这个函数定义了具体的映射关系。

匿名函数的简写方法,下划线用于通配,可通配x

 

两次list定义及通配

 

13flatMap函数两层list展平成一层list(也可自己写代码遍历取出)

总结一下map函数和flatMap函数的区别:map函数的返回值的类型和它的原来的集合的类型是一样的,而flatMap函数对于两层的list会转换成一层。

二,集合的规约操作

归约操作即把集合的元素经过某种操作或某种运算规约为一个值。

1reduceLeft

reduceLeft(op: (T, T) => T)

 

2foldLeft

柯里化书写方法foldLeft(z :U) (op :(U, T) => U)

“z”是规约初始值,规约后值的类型和规约初始值的类型相同。

 

三,Range

Range就是一个整数序列。

定义一个Range

”to”

“util”

 

四,Stream

Stream是一个Lazy List,即惰性求值列表。

看例子:

 

可以看到,”?”表明对于第一个元素,值是确定的,对于其他的元素,是不进行求值的。只有当用到它的时候才会进行求值,即按需求值。

如同listStream也有head函数和tail

 

五,Tuple

相当于数据库中的记录的概念,如果有两个值,称之为”pair”

看例子

1,定义一个Tuper(两种方式):

2遍历元组的元素


3,应用Tuple


六,Map[K ,V]

1定义一个Map

2,取Map中的值


3Map中添加一个元素(+)或多个元素(++


4Map中删除一个元素(-)或多个元素(--


5综合添加删除元素


,综合例子---快速排序

 

八,一些资源阅读材料

http://docs.scala-lang.org/overviews/collections/introduction.html

原创粉丝点击