Ce face Iterable.reduce
reduce ia primul element, îl combină cu al doilea, rezultatul cu al treilea și așa mai departe. Rezultatul are același tip ca elementele. Pe o colecție goală aruncă StateError.
fold pornește de la o valoare inițială pe care o dai tu și poate produce un tip diferit (de exemplu, suma lungimilor unor texte). Pe o colecție goală returnează valoarea inițială, deci este alegerea mai sigură.
Parametri
| Parametru | Descriere |
|---|---|
combine |
Funcția care primește rezultatul de până acum și elementul curent și returnează noul rezultat. |
initialValue |
Pentru fold: valoarea de start. |
Ce returnează
Valoarea finală a combinării.
Exemple
Exemplul 1: Suma, maximul și media
void main() {
final note = [9, 7, 10, 8];
final suma = note.reduce((a, b) => a + b);
final maxim = note.reduce((a, b) => a > b ? a : b);
print('suma = $suma, maxim = $maxim');
print('media = ${(suma / note.length).toStringAsFixed(2)}');
}
Rezultat
suma = 34, maxim = 10
media = 8.50
Exemplul 2: fold cu alt tip și pe o listă goală
fold merge și pe liste goale; reduce aruncă eroare.
void main() {
final orase = ['Iași', 'Cluj', 'Timișoara'];
final litere = orase.fold(0, (total, oras) => total + oras.length);
print('Total litere: $litere');
final cos = <double>[];
print('Total coș gol: ${cos.fold(0.0, (a, b) => a + b)}');
try {
cos.reduce((a, b) => a + b);
} on StateError catch (e) {
print('reduce pe listă goală: $e');
}
}
Rezultat
Total litere: 17
Total coș gol: 0.0
reduce pe listă goală: Bad state: No element
Greșeli frecvente
- Folosești
reducepe o listă care poate fi goală: programul se oprește cuBad state: No element. Foloseștefold. - Scrii
fold(0, ...)pentru numere zecimale: tipul rezultatului devineintși apare o eroare de tip. Pornește de la0.0.
Comenzi înrudite
Iterable.every: every verifică dacă toate elementele trec testul; any verifică dacă măcar unul îl trece.Iterable.join: Lipește elementele într-un singur text, cu un separator între ele.Stream.fold: Combină toate valorile stream-ului într-un singur rezultat (sumă, maxim, text); fold pornește de la o valoare dată.