#Kata reduceLeft y reduceRight en Scala

En este post te voy a explicar como funciona reduceLeft y reduceRight en Scala.

Primeros pasos.

ReduceLeft y ReduceRight son métodos que atraviesan una colección. Sirven para reducir la colección a un solo elemento. A diferencia de foldLeft y foldRight, los métodos de reducción no reciben un valor semilla.

var list = List(1, 2, 3, 4, 5)
var leftResult = list.reduceLeft(_ - _)
println(leftResult)
var rightResult = list.reduceRight(_ - _)
println(rightResult)
view raw reduce.sc hosted with ❤ by GitHub

¿Cuál es la diferencia entre ReduceLeft y ReduceRight?

En Scala, la iteración sobre colecciones se hace de manera recursiva. La cabeza de la colección se encuentra, por lo general, en la parte izquierda.  Cuando aplicas reduceLeft, la colección empieza el lado izquierdo e itera hasta el final. En cambio, cuando ejecutas reduceRight, el método tiene que iterar hasta el elemento final de la colección, luego iterar hasta el comienzo, o sea ejecutar dos operaciones. El coste computacional es ligeramente superior con reduceRight.

case class Person(name:String, age:Int)
var list = List(Person("Alice", 20),
Person("Bob", 22),
Person("Cal", 23),
Person("Dave", 20))
def compareLeft(current:Person, previous:Person):Person = {
println(current)
if(current.age > previous.age) current else previous
}
//The order of iteration is A, B, C, D
var oldestPersonLeft = list.reduceLeft(compareLeft)
println(s"Oldest Left:$oldestPersonLeft")
def compareRight(previous:Person, current:Person):Person = {
println(current)
if(current.age > previous.age) current else previous
}
//The order of iteration is D, C, B, A
var oldestPersonRight = list.reduceRight(compareRight)
println(s"Oldest Right:$oldestPersonRight")
view raw reduce.sc hosted with ❤ by GitHub

Referencias:

Gustavo Sánchez

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.

Site Footer