开发者学堂课程【Scala 核心编程 - 进阶:扫描】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9057
扫描
内容介绍
一.扫描简介
二.引用实例
三.执行过程
一.扫描简介
扫描,即对某个集合的所有元素做 fold 操作,但是会把产生的所有中间结果放置于一个集合中保存,他会把整个流程都展示出来。
二、引用实例
def minus( num1: Int, num2 :Int ) :Int={
num1-num2
//5 (1,2,3,4,5)=>(5,4,2,-1,-5,-10)
val i8 = (1 to 5).scanLeft(5)(minus) //IndexedSeq[Int]
println(i8)
def add( num1:Int,num2 :Int):Int={ num1 + num2 7J 15(1,23,4,5)=>(568.111520)
val i9 = (1to 5).scanLeft(S)(add) /IndexedSeq[Int]
println(i9)
三.执行过程
新建一个文件叫 scanDemo01 然后写一个代码,这个函数就是一个普通的函数,我没有写list 我们只看1 to 5,就代表1到5的集合 ,它是一个集合,从左开始扫描,它把第一个保留下来,然后再开始折叠,这个跟前面有一个区别,它先把第一个元素放置,然后进行折叠操作,就是5跟1进行折叠
packege com.atguigu.chepter11
object IteratorDemoe1 {
def main(args: Array[string]): Unit = {
val iterator = List(1,2, 3,4, 5).iterator // 得到速代器
iteratol
println("--------遍历方式1--------")
while (iterator.hasNext){
println(iterator.next())
println("--------遍历方式2for--------")
for(enum <- iterator) {
println(enum)//
1等于4,这个4拿到以后结果再跟2进行处理,这个结果就是4减去2等于2,2减去一个3等于负1,它把每一次的结果都给保留起来了,负5减去一个5等于负4,整个流程都是一样的,它把第一个先保留4,整个返回的i8是一个 indexedseq,i8 是一个索引的序列,结果我们执行一下就行,并不难,执行
Packege com.atguigu.chepter11
Object IteratorDemoe1 {
def main(args: Array[string]): Unit = {
val iterator = List(1,2, 3,4, 5).iterator // 得到速代器
iterator的继承关系
def iterator:Iterator[A]=new Abstractiterator[A]{
Var these=self
def hasNext:Boolean=Ithese.isEmpty
def next(): A =
If(hasNext)
val result=these.head; these = these.tail; result
} else Iterator.empty.next()
println("--------遍历方式1 while ----------”)
while (iterator.hasNext){
println(iterator.next())
}
println("--------遍历方式2 for -----------------”)
for(enum <- iterator) {
println(enum) //
向有扫描,为了显示不同的效果,又写了一个新的函数叫 add ,这个普通函数,现在我们向右扫描,同样的道理,来分析一下流程,先写一个5,然后再分析,先把i9进行一个输出,然后运行结果,这个结果跟我们想象的一样,首先先把扫描的第一个数保存,然后开始右扫描,5+5等于10,10又作为第二个参数放进去,14又跟前面的3相加,就是17,又跟前面的2相加,就变成了19,19又跟前面1相加,然后完全一样,唯一要记住的区别就是扫描要把数给保存,然后再记住东西,这是扫描的基本介绍。
多扫描练习题,如下:
Val sentence="AAAAAAAAAABBBBBBBBCCCCCDDDDDDD"将 sentence 中各个字符,通过 foldLeft 存放到一个ArrayBuffer中目的:理解 flodLeft 的用法.
val sentence ="AAAAAAAAAABBBBBBBBCCCCCDDDDDDD"
Def putArry( arr:ArrayBuffer[Char],c: Char):ArrayBuffer[Char]=(
arr.append(c)
arr
//创建val arr = ArrayBuffer[Char]()
val arr =ArrayBuffer[Char]()
sentence.foldLeft(arr)(putArry)
先观察一下结果是什么,向左扫描的图,先保留3,然后跟后面1相乘,3又跟后面2相乘,就是6,6再跟后面3相乘,就是18,结果就是3.6.18。