Метод fold
Метод fold сворачивает элементы коллекции
в одно значение. Он последовательно перебирает
элементы и применяет к ним переданную функцию.
Первым параметром метод принимает начальное
значение аккумулятора, вторым - функцию, которая
принимает текущее значение аккумулятора и
очередной элемент коллекции, а возвращает новое
значение аккумулятора. В отличие от метода
reduce, метод fold может принимать
начальное значение любого типа, а не только типа
элементов коллекции. Исходная коллекция при этом
не изменяется.
Синтаксис
iterable.fold(initialValue, (accumulator, element) => ...)
Пример
Давайте найдём сумму всех элементов списка,
взяв в качестве начального значения 0:
void main()
{
List<int> numbers = [1, 2, 3, 4, 5];
int res = numbers.fold(0, (acc, item) => acc + item);
print(res);
}
Результат выполнения кода:
15
Пример
Давайте найдём произведение всех элементов списка,
взяв в качестве начального значения 1:
void main()
{
List<int> numbers = [1, 2, 3, 4, 5];
int res = numbers.fold(1, (acc, item) => acc * item);
print(res);
}
Результат выполнения кода:
120
Пример
Давайте соберём все элементы списка строк в одну строку:
void main()
{
List<String> letters = ['a', 'b', 'c', 'd', 'e'];
String res = letters.fold('', (acc, item) => acc + item);
print(res);
}
Результат выполнения кода:
"abcde"
Пример
Давайте найдём максимальный элемент списка, взяв в качестве начального значения первый элемент:
void main()
{
List<int> numbers = [1, 2, 3, 4, 5];
int res = numbers.fold(numbers.first,
(acc, item) => item > acc ? item : acc);
print(res);
}
Результат выполнения кода:
5