La función List.Accumulate devuelve el valor acumulado resultante de aplicar una función a los elementos de una lista.
List.Accumulate(
list as list,
seed as any,
accumulator as function
) as any
- list: lista de valores a evaluar
- seed: valor inicial a usar
- accumulator: función binaria a aplicar a los valores
La función accumulator va a ir recorriendo la lista de izquierda a derecha, aplicándose a los dos primeros valores en primer lugar (o al valor seed y al primer valor, si es que se ha definido seed) y, a partir de ahí, aplicándose al resultado anterior obtenido y al siguiente valor.
En este ejemplo partimos de una lista que vamos a recorrer sumando sus valores:
let
values = {1, 2, 3, 4, 5}
in
List.Accumulate(
values,
0,
(x, y) => x + y
)
15
Siguiendo con el ejemplo anterior, si añadimos el parámetro seed, éste se usa como primer valor a considerar en el cálculo:
let
values = {1, 2, 3, 4, 5}
in
List.Accumulate(
values,
10,
(x, y) => x + y
)
25
En este ejemplo partimos de una lista que contiene tanto números positivos como negativos y usamos la función List.Accumulate para sumar solo los valores mayores o iguales a cero:
let
values = {1, 2, -5, 3, 4, -7, 5}
in
List.Accumulate(
values,
0,
(x, y) => if y >= 0 then x + y else x
)
15
No solo es posible trabajar con listas de números. En este ejemplo partimos de una lista de textos y concatenamos sus valores para devolver una única cadena. Obsérvese la necesidad de inicializar el parámetro seed con una cadena vacía:
let
values = {"c", "h", "a", "o", "s"}
in
List.Accumulate(
values,
"",
(x, y) => x & y
)