折叠的基本介绍和使用 | 学习笔记

简介: 快速学习折叠的基本介绍和使用

开发者学堂课程【Scala 核心编程 - 进阶折叠的基本介绍和使用学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9055


折叠的基本介绍和使用


内容介绍

一、基本介绍

二、应用案例


一、基本介绍

fold 函数将上一步返回的值作为函数的第一个参数继续传递参与运算直到 list 中的所有元素被遍历。

1.可以把 reduceLeft 看做简化版的 foldLeft 也就是说foldLeft更加强大。

为什么呢?我们看reduceLeft 底层代码,但是我们也可以在源码上追加

def reduceLeft[B>:A] (@deprecatedName(‘f)op:(B,A)=>B):B=if (isEmpty) throw new UnsupportedOperationaException(“empty.reduceLeft”)

Else tail foldLeft[B](head)(op)

这里就用到了 foldLeft,这两个区别在什么呢

reduceLeft跟这个折叠最大的区别是,我们这个向左折叠他会首先有一个同,然后传入折叠的具体函数

如何理解:

def reduceleLeft[B>A](@deprecatedName(‘f)op:(B,A):B =if (isEmpty) throw new UnspportedOper ationException (“empty、 reduceLeft”) else tail.foldLeft[B](head)(op)

可以看到 reduceLeft 就是调用的 foldLeft[B](head),并且是默认从集合head 元素开始操作的.

2.相关函数:fold、foldLeft、foldRight,可以参考 reeduce 的相关方法理解


二、应用案例

Object FoldDemo01{

Def main (args;Array[string]:Unit={

Val list=List(1,2,3,4)

Def=minus(num:Int,num2:Tnt):Tnt={num1-num2}

//说明

//1、折叠的理解化和化简的运行机制几乎一样.

//理解

List,foldLeft(5)(minus)理解成

List(5,1,2,3,4)List reduceLeft(minus)

//步骤(5-1)

//步骤((5-1)-2)

//步骤(((5-1)-2)-3)

//步骤((((5-1)-2)-3))-4=-5

Drinln (list,foldLeft(5)(minus))//函数柯里化

////理解 Liet,foldList(5)(minus)理解成List(1,2,3,4,5)

List,reduceRight(minus)

//步骤(4-5)

//步骤(3-(4-5)

//步骤(2-(3-(4-5)))

//步骤1-(2-(3-(4-5)))=3

PintLn(List、foldRight(5)(minus))//

相关文章
|
域名解析 网络协议 测试技术
性能测试-弱网测试参数选择标准
在当今移动互联网盛行的时代,网络的形态除了有线连接,还有2G/3G/Edge/4G/Wifi等多种手机网络连接方式。不同的协议、不同的制式、不同的速率,使移动应用运行的场景更加丰富。
12575 0
性能测试-弱网测试参数选择标准
|
机器学习/深度学习 存储 人工智能
DeepSpeed ZeRO++:降低4倍网络通信,显著提高大模型及类ChatGPT模型训练效率
DeepSpeed ZeRO++:降低4倍网络通信,显著提高大模型及类ChatGPT模型训练效率
611 0
DeepSpeed ZeRO++:降低4倍网络通信,显著提高大模型及类ChatGPT模型训练效率
|
Java Linux 开发工具
Linux下解压修改jar包并运行
Linux下解压修改jar包并运行
1388 0
|
域名解析 缓存 监控
介绍下我的 vscode 插件: Live Host
介绍下我的 vscode 插件: Live Host
596 0
扫码填写信息:使用这个设置,避免重复提交!
在用二维码进行活动报名或是物品领用时,如果有人重复提交,统计数据就会变得很麻烦。为了避免这种情况,我们可以开启【内容不可重复提交】这个设置。开启后,填表人就不能再填写 和「自己」 或 「其他填表人」 已提交的数据相同的内容。
272 1
|
Dart 开发者
Dart中的类型判断(is 关键字)
Dart中的类型判断(is 关键字)
330 0
|
移动开发 JSON 数据可视化
分享6款yyds的可视化搭建开源项目
分享6款yyds的可视化搭建开源项目
526 0
Google Earth Engine(GEE)—— 基于MODIS影像单点缓冲区长时序温度时序变化和线性趋势分析
Google Earth Engine(GEE)—— 基于MODIS影像单点缓冲区长时序温度时序变化和线性趋势分析
220 0
|
缓存 Android开发
基于autojs7的番茄免费小说辅助
基于autojs7的番茄免费小说辅助
523 0
|
iOS开发
iOS用CallKit实现来电识别、来电拦截
前言 最近需要实现一个新需求,用iOS 10出的CallKit实现将APP的通讯录的信息同步到系统中,可以不把人员信息加到通讯录中,实现来电号码识别。
3853 0