Escala | función reduce()

El método reduce() es una función de orden superior que toma todos los elementos de una colección (Array, List, etc.) y los combina mediante una operación binaria para producir un valor único. Es necesario asegurarse de que las operaciones sean conmutativas y asociativas. Las funciones anónimas se pasan como parámetro a la función reduce. 
Sintaxis
 

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

El orden en que se seleccionan los números para operar con el método de reducción es aleatorio. Esta es la razón por la que no se prefieren las operaciones no conmutativas y no asociativas. 
Ejemplo : 
 

scala

// 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)
}
}

Producción : 
 

7

En el programa anterior, el método de reducción selecciona pares aleatorios y descubre el valor máximo en un par en particular. Estos valores se comparan de nuevo entre sí hasta que se obtiene un único elemento de valor máximo. Por lo general, usamos el método reduce() junto con el método map() cuando trabajamos con conjuntos de datos distribuidos resistentes en Spark. El método map() nos ayuda a transformar una colección en otra colección mientras que el método reduce() nos permite realizar alguna acción.
Encontrar el promedio usando map() y reduce():  
Ejemplo: 
 

scala

// 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 corresponding 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)
}
}

Salida
 

(21, 4)
Average= 5.25

En el programa anterior, todos los elementos de la colección se transforman en tuplas con dos elementos. El primer elemento de la tupla es el propio número y el segundo elemento es el contador. Inicialmente, todos los contadores se establecen en 1. La salida en sí es una tupla con dos elementos: el primer valor es la suma y el segundo valor es el número de elementos. 
Nota : el tipo de salida proporcionado por el método reduce() es el mismo que el tipo de elementos de la colección.
 

Publicación traducida automáticamente

Artículo escrito por MohammadKhalid y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *