• scala


    说明

    1. 从本质上来讲,fold方法读取一种数据,然后返回给你另外一种。
    2. fold和foldLeft和foldRight做的事同样的事情,仅有一点点不同。

    fold

    val numbers = List(1, 2, 3, 4, 5)
    val res = numbers.fold(10) { (z, i) => z + i }
    // res = 25

    List对象的fold方法,需要两个参数

    1. 开始值,上面写的是10。
    2. 一个function,这个function也需要两个参数。列表中的累计值z,列表中的当前值i。

    所以,在执行开始时,10作为第一个参数传递给函数,z = 10。列表中的第一项(也可能是第二项或者其他项,无须)作为第二个参数传递给函数,i = 1。

    然后函数应用于它的两个参数,10 + 1,然后返回一个结果。

    然后,Fold将前面的返回值作为函数的第一个参数,并将列表中的下一个项目作为第二个参数,然后应用它,返回结果。

    这个过程对列表中的每个项目重复执行,并在遍历列表中的所有项目之后返回函数的返回值。

    foldLeft

    package info.aoye
    
    class Foo(val name: String, val age: Int, val sex: Symbol)
    
    object Foo {
      def apply(name: String, age: Int, sex: Symbol) = new Foo(name, age, sex)
    }
    
    object Test {
      def main(args: Array[String]): Unit = {
        val fooList = Foo("Hugh Jass", 25, 'male) ::
          Foo("Biggus Dickus", 43, 'male) ::
          Foo("Incontinentia Buttocks", 37, 'female) ::
          Nil
    
        val stringList = fooList.foldLeft(List[String]()) { (z, f) =>
          val title = f.sex match {
            case 'male => "Mr."
            case 'female => "Ms."
          }
          z :+ s"$title ${f.name}, ${f.age}"
        }
        // List(Mr. Hugh Jass, 25, Mr. Biggus Dickus, 43, Ms. Incontinentia Buttocks, 37)
      }
    }
    

    三个方法之间的区别

    1. 本质的功能没什么区别。
    2. foldLeft 是从左向右开始遍历,foldRight是从右向左开始遍历,fold的是无须的的遍历。
  • 相关阅读:
    hibernate -- HQL语句总结
    Struts2文件上传的大小限制问题
    WZY社区
    MyEclipse2014 优化设置
    如何优化myeclipse.
    棋盘覆盖问题(算法分析)(Java版)
    java 十六进制颜色对照表
    sql server 2012 自定义聚合函数(MAX_O3_8HOUR_ND) 计算最大的臭氧8小时滑动平均值
    oracle 自定义聚合函数(MAX_O3_8HOUR_ND) 计算最大的臭氧8小时滑动平均值
    python 读取全国城市aqi数据,差值生成png图片
  • 原文地址:https://www.cnblogs.com/duchaoqun/p/78c58a7957e526d4358446576a1f407e.html
Copyright © 2020-2023  润新知