Escala | Reducir, plegar o escanear

En este tutorial aprenderemos sobre las funciones Reducir, Plegar y Escanear en Scala.

  1. Reducir: la función Reducir se aplica en la estructura de datos de colección en Scala que contiene listas, conjuntos, mapas, secuencias y tuplas. El parámetro en la función de reducción es una operación binaria que fusiona todos los elementos de la colección y devuelve un valor único. Los dos primeros valores se combinan con la operación binaria y la resultante de esa operación se combina con el siguiente valor de la colección y por fin obtenemos un solo valor.

    Este código implementa la Suma de elementos en una secuencia usando la función de reducción.
    Ejemplo :

    // Scala program sum of elements 
    // using reduce function 
      
    // Creating object
    object geeks
    {
        // Main method
        def main(arg:Array[String])
        {
            // initialize a sequence of elements
            val seq_elements: Seq[Double] = Seq(3.5, 5.0, 1.5)
            println(s"Elements = $seq_elements"
      
            // find the sum of the elements
            // using reduce function
            val sum: Double = seq_elements.reduce((a, b) => a + b)
            println(s"Sum of elements = $sum")
        }   
    }

    Producción:

    Elements  = List(3.5, 5.0, 1.5)
    Sum of elements = 10.0
    

    Este código encuentra el elemento máximo y mínimo en la secuencia usando la función de reducción
    Ejemplo:

    // Scala program to find maximum and minimum 
    // using reduce function 
      
    // Creating object
    object geeks
    {
        // Main method
        def main(arg:Array[String])
        {
            // initialize a sequence of elements
            val seq_elements : Seq[Double] = Seq(3.5, 5.0, 1.5)
            println(s"Elements = $seq_elements")
      
            // find the maximum element using reduce function
            val maximum : Double = seq_elements.reduce(_ max _)
            println(s"Maximum element = $maximum")
      
            // find the minimum element using reduce function
            val minimum : Double = seq_elements.reduce(_ min _)
            println(s"Minimum element = $minimum")
        }
    }

    Producción:

    Elements = List(3.5, 5.0, 1.5)
    Maximum element = 5.0
    Minimum element = 1.5
    
  2. Fold: Al igual que reduce fold, también realiza una operación binaria que fusiona todos los elementos de la colección y devuelve un solo valor. La diferencia es que fold nos permite definir un valor inicial. Debido a esta propiedad, fold también puede administrar colecciones vacías. Si la colección está vacía, el valor inicializado se convierte en la respuesta final. Debido a esto, también podemos devolver un valor diferente del conjunto de colección utilizando el valor inicial de algún otro tipo de datos. Reduce solo puede devolver el valor del mismo tipo porque su valor inicial es el primer valor de la colección.

    Este código implementa la Suma de elementos en una secuencia usando la función de plegado. Aquí el valor inicial se toma como 0.0 ya que la secuencia está en el tipo de datos Doble.
    Ejemplo :

    // Scala program sum of elements 
    // using fold function 
      
    // Creating object
    object geeks
    {
        // Main method
        def main(arg:Array[String])
        {
            // initialize a sequence of elements
            val seq_elements: Seq[Double] = Seq(3.5, 5.0, 1.5)
            println(s"Elements = $seq_elements"
      
            // find the sum of the elements using fold function
            val sum: Double = seq_elements.fold(0.0)((a, b) => a + b)
            println(s"Sum of elements = $sum")
        }
    }

    Producción:

    Elements = List(3.5, 5.0, 1.5)
    Sum of elements = 10.0
    

    Este código concatena las strings con guión. Usamos el valor inicial como string vacía. Por lo tanto, nuestro método de plegado aplicará el operador en una string vacía, mientras que con reduce no obtendríamos el guión antes del primer valor de la colección.
    Ejemplo :

    // Scala program concatenate string 
    // using fold function 
      
    // Creating object
    object geeks
    {
        // Main method
        def main(arg:Array[String])
        {
            // initialize a sequence of strings
            val str_elements: Seq[String] = Seq("hello",
                                "Geeks", "For", "Geeks")
            println(s"Elements = $str_elements"
      
            // Concatenate strings with fold function
            val concat: String = str_elements.fold("")(
                                    (a, b) => a + "-" + b)
            println(s"After concatenation = $concat")
        }
    }    

    Producción:

    Elements = List(hello, Geeks, For, Geeks)
    After concatenation = -hello-Geeks-For-Geeks
    
  3. Escaneo: la función de escaneo toma la operación binaria como parámetro y devuelve el valor de cada elemento de la colección para esa operación. Devuelve cada iteración para ese operador binario en la colección. En scan también podemos definir el valor inicial.


    Este código implementa iteraciones de la suma de todos los elementos usando la función de escaneo.
    Ejemplo :

    // Scala program sum of elements 
    // using scan function 
      
    // Creating object
    object geeks
    {
        // Main method
        def main(arg:Array[String])
        {
            //initialize a sequence of numbers
            val numbers: Seq[Int] = Seq(4, 2, 1, 6, 9)
            println(s"Elements of numbers = $numbers")
      
            //find the sum of the elements using scan function
            val iterations: Seq[Int] = numbers.scan(0)(_ + _)
            println("Running total of all elements" +
                    s"in the collection = $iterations")
        }
    }    

    Producción:

    Elements of numbers = List(4, 2, 1, 6, 9)
    Running total of all elements in the collection = List(0, 4, 6, 7, 13, 22)
    

    Esta es la implementación de la concatenación de strings con guión y muestra las iteraciones.
    Ejemplo :

    // Scala program concatenate string 
    // using scan function 
      
    // Creating object
    object geeks
    {
        // Main method
        def main(arg:Array[String])
        {
            // initialize a sequence of strings
            val str_elements : Seq[String] = Seq("hello"
                                "Geeks", "For", "Geeks")
            println(s"Elements = $str_elements")
      
            // Concatenate strings with scan function
            val concat : Seq[String]
                        = str_elements.scan("")((a, b) => a + "-" + b)
            println(s"After concatenation = $concat")
        }
    }    

    Producción:

    Elementos = Lista (hola, Geeks, Para, Geeks)
    Después de la concatenación = Lista (, -hola, -hola-Geeks, -hola-Geeks-Para, -hola-Geeks-Para-Geeks)

Publicación traducida automáticamente

Artículo escrito por aakarsha_chugh 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 *