当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Scala reduce()用法及代码示例


reduce()方法是一个高阶函数,它接受集合中的所有元素(数组,列表等),并使用二进制运算将它们组合以产生单个值。必须确保运算是可交换的和关联的。匿名函数作为参数传递给reduce函数。句法:

val l = List(2, 5, 3, 6, 4, 7)
// returns the largest number from the collection
l.reduce((x, y) => x max y)

通过reduce方法选择数字进行运算的顺序是随机的。这就是为什么不优选非交换和非关联运算的原因。例子:

// Scala program to 
// print maximum value 
// using reduce() 
  
// Creating object 
object GfG 
{ 
      
// Main method 
def main(args:Array[String]) 
{ 
    // source collection 
    val collection = List(1, 3, 2, 5, 4, 7, 6) 
  
    // finding the maximum valued element 
    val res = collection.reduce((x, y) => x max y) 
  
    println(res) 
} 
}

输出:

7

在上述程序中,reduce方法选择随机对,并找出特定对中的最大值。再次将这些值相互比较,直到获得单个最大值元素。在处理Spark中的弹性分布式数据集时,我们通常会同时使用reduce()方法和map()方法。 map()方法帮助我们将一个集合转换为另一个集合,而reduce()方法则使我们能够执行某些操作。

使用map()和reduce()查找平均值:
例:

// Scala program to 
// print average 
// using map() and reduce() 
  
//Creating object 
object GfG 
{ 
      
// Main method 
def main(args:Array[String]) 
{ 
    // source collection 
    val collection = List(1, 5, 7, 8) 
  
    // converting every element to a pair of the form (x,1) 
    // 1 is initial frequency of all elements 
    val new_collection = collection.map(x => (x,1)) 
  
    /* 
    List((1, 1), (5, 1), (7, 1), (8, 1)) 
    */
  
    // adding elements at correspnding positions 
    val res = new_collection.reduce( (a,b) => ( a._1 + b._1, 
                                            a._2 + b._2 ) ) 
    /* 
    (21, 4) 
    */
  
    println(res) 
    println("Average="+ res._1/res._2.toFloat) 
} 
}

输出

(21, 4)
Average= 5.25

在上面的程序中,集合的所有元素都被转换为带有两个元素的元组。元组的第一个元素是数字本身,第二个元素是计数器。最初,所有计数器都设置为1。输出本身是具有两个元素的元组:第一个值是总和,第二个值是元素数。注意:reduce()方法给出的输出类型与集合元素的类型相同。




相关用法


注:本文由纯净天空筛选整理自MohammadKhalid大神的英文原创作品 Scala | reduce() Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。