Simplificación de Scala | reducción reduce el método de análisis del código fuente

efecto

  • Agregue elementos en el mismo conjunto.
val list1: List[Int] = List(1, 2, 3, 4, 5, 6)
println(list1.reduce(_ + _))	// 21
// reduce底层调用的是reduceLeft,从左到右,两两元素进行聚合
println(list1.reduce(_ - _))    // -19

println(list1.reduceRight(_ - _))   // -3

reducir 和 reducirIzquierda

  • La llamada subyacente de reduce es reduceLeft, y los elementos del conjunto se agregan en pares de izquierda a derecha.
  • En el ejemplo anterior, el proceso en ejecución de list1.reduce (_ + _) es:
            => (((((1 + 2) + 3) + 4) + 5) + 6

reduceRight

  • Primero, echemos un vistazo al código fuente de reduceRight:
    Inserte la descripción de la imagen aquí
  • Ejecute list1.reduceRight (_-_). Primero, nuestra colección no es una colección vacía, y luego juzgamos si el elemento final de nuestra colección está vacío. La primera ejecución es obviamente no vacía, por lo que la primera ejecución es op ( head, tail .reduceRight (op)) , que es 1-op (List (2,3,4,5,6))
  • En la segunda ejecución, se hace el mismo juicio que el anterior, es decir, 1- (2- (Lista (3,4,5,6))).
  • La tercera ejecución, la misma, 1- (2- (3- (Lista (4, 5, 6)))).
  • ...
  • Hasta la quinta ejecución, 1- (2- (3- (4- (5-op (List (6)))))).
  • Por sexta vez, tail.isEmpty es verdadero, luego se devuelve la cabeza, es decir, 1- (2- (3- (4- (5-6))))) = -3.

Supongo que te gusta

Origin blog.csdn.net/FlatTiger/article/details/114597982
Recomendado
Clasificación