首页 > 其他 > 详细

foldLeft

时间:2021-01-05 10:46:37      阅读:37      评论:0      收藏:0      [点我收藏+]

Scala语言中,foldLeft函数的三个使用场景:

列表内数值的相加,作用相当于sum;

List(1,7,2,9).foldLeft(0)(_-_)

(1)List从左开始

(2)结果在左面

0-1

(0-1)-7

((0-1)-7)-2

(((0-1)-7)-2)-9

List(1,7,2,9).foldRight(0)(_-_)

(1)List从右开始

(2)结果在右面

9-0

2-(9-0)

7-(2-(9-0))

1-(7-(2-(9-0)))

变换后的Map集合有重复key值,并且需要根据key值合并

合并Map重复key值统计词长度

package spark2021

object foldLeft_test {
  def main(args: Array[String]): Unit = {




    //场景一:列表数值相加
    val list = List(1,2,3,4,5)
    val sum_list: Int = list.foldLeft(0)(_+_)
    println(sum_list)
    //map++更新数据 map+添加数据

    //合并两个Map
    //++:重复key值相加,不覆盖
    val map1 = Map("aa" -> 1, "bb" -> 2)
    val map2 = Map("aa" -> 2, "cc" -> 4)

    val map3: Map[String, Int] = map1++map2
    println(map3) //Map(aa -> 2.0, bb -> 2.0, cc -> 4.0)

    //foldLeft:map相同key的value没有被覆盖,而是相加合并了
    val map4: Map[String, Int] = map1.foldLeft(map2) {
      case (newMap, (name, score)) => {
        newMap + (name -> (score + map2.getOrElse(name, 0)))
      }
    }
    println(map4) //Map(aa -> 3, cc -> 4, bb -> 2)

    //统计不同长度单词的总词频
    val wordsMap = Map("apple" -> 20, "pear" -> 10, "pineapple" -> 25, "grape" -> 30)
    val map5= wordsMap.foldLeft(Map.empty[Int,Int]){
      case(newMap,(fruit,count))=>{
        newMap+(fruit.length->(count+newMap.getOrElse(fruit.length,0)))
      }
    }
    println(map5)

  }

}

 

foldLeft

原文:https://www.cnblogs.com/hapyygril/p/14233814.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!