开发者学堂课程【Scala 核心编程 - 进阶:集合化简的课堂练习】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9054
集合化简的课堂练习
内容介绍
一.运行过程
二.化简
一.运行过程
在这里有一个历史的集合,在集合里面将数写的很大,因为相加不论是从左还是从右,结果都是一样的。
写成一个 miners,就是 NUMBER1 减去一个 number,现在我们来看用历史的调灵钓了一个 reduce left,然后调了一个 reduce the right,调了一个 reduce 的方法。
那么现在我们来看这个题目是什么,然后新建一个文件,我们将它叫做练习三,reduce 的一个练习,Reduce exercise,文件练习写完之后,把这个 DF 写到里面和写在外面本质是一样的,我们就将这个写到里面,现在来看看这个代码是什么。
val list4 =List(1, 9, 2,8)
def minus(num1: Int,num2: Int): Int=(
num1 -num2
) I
Var i6=(1/: list4) (minus) // ==> list4.foldLeft(0)(minus)printin(i6)//输出?
i6=(100st4)(minus)
printin(i6)//输出?
i6 = (list4:\10)(minus)// list4.foldRight(10)(minus)println(i6)//输出?
然后下面 right ,输出一个词并且说明这个词用的正确,
因为你是从左边开始化解,那么相当于一个动作是这样,是一减二减完过后,再跟三相减,所以说把这个结果拿到过后,再去跟四相等跟四相等之后把这个结果拿到之后,再传入这个 minus 的第一个参数,然后再去跟五相等,最后这个结果等于三正确,然后下面这个,从右化简它的流程是这样,同学们看是4和5相间隔,相间隔四减去一个 5a,它是先运行,做完了以后,他把这个结果传出这个 minus 的右面这个程序,那同样你这边把它包起来,包起来之后又传入下一个第二个参数,如果没问题,紧接着又做一个值传入给 minus 的归档,最后这个结果应该是等于三,算一下这个四减五等于负一,负一三减去一个负一等于四.二减去一个四等于负1/2,减去一个负,二等于三四圈,那下面这个问题我们可以直接看看源代码
vari6=(1/:list4)(minus)//=等价=> list4.foldLeft(1)(minus)println("i6=" +i6)
i6=(100/:list4)(minus)//=等价=> list4.foldLeft(100)(minus)println(i6)//输出? I
i6 =(list4:\10)(minus)//list4.foldRight(10)(minus)
println(i6) // 输出? 2
根据代码可以完全理解。
二.化简
现在就是说 reduce 底成交的,Reduce 等价于 reduce next 对我们人的正常思维都是从昨天开始执行,他也保留了这个 reduce,然后做了一个包装好这个题,我们就评价紧接着我们再来做第二个题,使用化简的方式求出历史的3427最小值,现在打开这个 ID 给大家。
写一个最小值,求出最小值,写一个函数 PDF,就 mini 接收两个参数,一个是 N1N te 类型,A11 个一个类型,A1 Int 类型,然后 N2 也是一个 int 类型,最后返回一个 int 类型,然后这边只做一个工作就可以,如果 N1 的保险,我们就返回二对,因为我要最小值 else ,返回 a,然后写完,当写完以后,我们要求最小值特别的简单,那直接写一个 mini286 等于加上类似的点。
reduce,是从左向右划点,还是从右划点,是一样的,因为你这个返回是1个字,所以说我们就从左边,左边我直接把这个 mini 放进去,代码就写完了,那么看看这个结果,应该是返回一个1就正确了,因为我要最小值1。
代码如下:
package com.atguigu.chapter11
object ScanDemoo1 {
def main(args: Array[String]): Unit ={
//普通函数
def minus( num1 : Int, num2 : Int): Int={
num1 - num2
//5I(1,2,3,4,5)=>(5,)
val i8 = (1 to 5).scanLeft(5)(minus) //Indexedseq[Int]println(i8)
看见代码后我们就可以很清晰的了解。