扫描 | 学习笔记

简介: 快速学习扫描

开发者学堂课程【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。

相关文章
|
存储 Cloud Native 关系型数据库
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
608 3
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
|
算法 5G 调度
带你读《5G 无线增强设计与国际标准》第二章接入增强2.2非正交多址(一)
带你读《5G 无线增强设计与国际标准》第二章接入增强2.2非正交多址(一)
带你读《5G 无线增强设计与国际标准》第二章接入增强2.2非正交多址(一)
|
网络协议 安全 Linux
|
3天前
|
数据采集 人工智能 安全
|
12天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1054 151
|
4天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1737 9