Scala中的immutable Collection 集合
Traversable 遍历
Iterable 迭代
Set无序集合 Sequence序列 Map映射
Set
SortedSet HashSet BitSet ListSet
TreeSet
Sequence
IndexedSeq LinearSeq
IndexedSeq
Vector,NumericRange,Range,Array,String
LinearSeq
List,Stream,Quene,Stack
Map
Sortedmap HashMap LsitMap
TreeMap
List[T]
T是类型,由于会自动推导类型,所以不必指明类型
1 | scala> val a = List(1,2,3,4) //定义方法一 |
List的高阶函数 filter:过滤
1 | //将List元素进行过滤 |
List的高阶函数 map/flatMap:映射
1 | //对于下面的变量a和c应用映射 |
List的高阶函数 集合的规约操作
把集合的元素通过运算和操作规约为一个值
reduceLeft(op: (T, T) => T )
1 | x1 x2 x3 ... xn |
特性1:参数为一个匿名函数
特性2:规约结果一定是List元素的类型,所以是被经常使用的(相较于foldLeft)
1 | 对于List变量a |
<< 更多精彩尽在『程序萌部落』>>
<< https://www.cxmoe.com >>
foldLeft(z:U)(op: (U, T) => U )
1 | z x1 x2 ... xn |
特性1:使用柯里化定义
特性2:必须有初始值z
特性3:返回值是初始值z的类型,故不太使用
1 | scala> a |
惰性求值的类型:Stream 流
1 | //使用to或until来获取range类型 |
Scala中的tuple:元组
1 | //元组的概念,和Python中的元组类似,可以放不用类型的变量 |
元组的用处:
可以封装函数的返回值,在函数返回多个类型的变量时,可以包装起来一并返回
1 | //下面这个函数通过元组,一并返回输入参数List变量中所有元素的个数、求和、平方和 |
Scala中的Map<K,V>
1 | //使用类似元组的箭头来定义一个键值对 |
涉及的Map相关运算
1 | //使用+号 添加键值对,注意Map不支持混合类型的添加,否则会出错 |
函数式编程示例:快速排序
1 | def qSort(a:List[Int]):List[Int] = { |
解释:
首先快排需要一个分割变量,这里直接用a.head即输入List的第一个元素来做分割
其次是归类,每次递归都要分出小于,大于和等于的元素
然后是合并,使用++操作符,把每次的元素拼接起来,即每次调整后的结果
最后是判断递归结束条件:如果当前作为输入的分割后的List元素不足2,那么表示无序调整,排序结束
注意:
这里外层递归中含有两个递归,外层递归即函数的返回的是三部分之和,这并不是尾递归
这个例子是综合了函数式编程、高阶函数、递归等Scala编程思想的体现。
😒 留下您对该文章的评价 😄