fold, reduce ed espansione
Aggregare e appiattire gli iterable
fold, reduce ed espansione è una lezione Dart Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Dart Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Dart Academy include 4 lezioni in totale.
Aggregare una raccolta
Spesso si desidera ridurre un'intera lista a un unico valore, ad esempio una somma o un massimo. Dart offre fold e reduce proprio per questo. 🧮
Ecco reduce
reduce combina gli elementi a coppie utilizzando la funzione indicata. Inizia dal primo elemento, quindi la lista non può essere vuota.
var sum = [1, 2, 3, 4].reduce((a, b) => a + b);
print(sum); // 10reduce mantiene un risultato
A ogni passaggio riceve il risultato parziale e l'elemento successivo. Consideri a come l'accumulatore che cresce durante l'elaborazione.
var max = [3, 9, 2].reduce((a, b) => a > b ? a : b);
print(max); // 9Il problema della lista vuota
Chiamare reduce su una lista vuota genera uno StateError. Quando una lista potrebbe essere vuota, utilizzi fold.
Ecco fold
fold è simile a reduce, ma richiede un valore iniziale. Questo valore iniziale determina il tipo del risultato e gestisce in sicurezza le liste vuote.
var total = [1, 2, 3].fold(0, (a, b) => a + b);
print(total); // 6fold può cambiare tipo
Poiché il valore iniziale definisce il tipo, fold può trasformare una lista di int in una String, una Map o qualsiasi altro tipo necessario.
var joined = [1, 2, 3].fold('', (a, b) => '$a$b');
print(joined); // 123fold è sicuro con una lista vuota
Con una lista vuota, fold restituisce semplicemente il valore iniziale. Nessun errore e nessun caso speciale da ricordare.
var s = <int>[].fold(0, (a, b) => a + b);
print(s); // 0reduce e fold
Utilizzi reduce per una combinazione rapida dello stesso tipo su una lista non vuota. Scelga fold quando le serve un valore iniziale o un nuovo tipo di risultato.
Ecco expand
expand associa ogni elemento a un iterable, quindi li appiattisce tutti in un unico stream di valori. È map più flatten.
var r = [1, 2].expand((n) => [n, n * 10]);
print(r.toList()); // [1, 10, 2, 20]Appiattire liste annidate
Un uso comune di expand consiste nel trasformare una lista di liste in un'unica lista piatta con una sola chiamata chiara.
var flat = [[1, 2], [3, 4]].expand((x) => x);
print(flat.toList()); // [1, 2, 3, 4]Concatenare i tre metodi
Questi metodi si combinano magnificamente. Può usare expand per appiattire e poi fold per aggregare, in un unico pipeline leggibile.
var t = [[1, 2], [3]].expand((x) => x).fold(0, (a, b) => a + b);
print(t); // 6Verifica rapida
Scelga lo strumento giusto per una somma sicura anche con una lista vuota.
Riepilogo
reduce combina, fold combina con un valore iniziale ed expand appiattisce. Insieme consentono di aggregare facilmente qualsiasi raccolta. 🎉
Domande Frequenti
La lezione «fold, reduce ed espansione» è gratuita?
Sì — il testo completo di «fold, reduce ed espansione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Dart Academy, passa a CoddyKit PRO. Il corso Dart Academy include 4 lezioni in totale.
Cosa imparerò in «fold, reduce ed espansione»?
Aggregare e appiattire gli iterable Eserciti Dart Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Dart Academy?
Non è richiesta alcuna esperienza precedente. Dart Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «fold, reduce ed espansione»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Dart Academy?
Sì. Ogni lezione Dart Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Funzioni di ordine superiore e currying
- fold, reduce ed espansione
- Iterable lazy e generatori con sync*
- Composizione di pipeline di funzioni pure