Iterable.expand în Dart

expand transformă fiecare element în zero sau mai multe elemente și le pune cap la cap; followedBy lipește două iterabile.

Sintaxă
Iterable<T> expand<T>(Iterable<T> toElements(E element))
Iterable<E> followedBy(Iterable<E> other)

Ce face Iterable.expand

expand primește o funcție care, pentru fiecare element, returnează un iterable. Toate aceste iterabile sunt puse unul după altul într-un singur rezultat. Cu ea „aplatizezi” o listă de liste sau înlocuiești un element cu mai multe.

followedBy returnează un iterable leneș cu elementele primului, urmate de elementele celui de-al doilea. Spre deosebire de + pe liste, nu creează o listă nouă.

Parametri

Parametru Descriere
toElements Funcția care returnează elementele care înlocuiesc elementul curent (poate returna o listă goală).
other Pentru followedBy: iterable-ul adăugat la final.

Ce returnează

Un Iterable leneș.

Exemple

Exemplul 1: Aplatizarea unei liste de liste

void main() {
  final clase = [
    ['Ana', 'Mihai'],
    ['Ioana'],
    <String>[],
    ['Vlad', 'Elena', 'Radu'],
  ];
  final totiElevii = clase.expand((clasa) => clasa).toList();
  print(totiElevii);
  print('Total: ${totiElevii.length} elevi');

  final dublate = [1, 2, 3].expand((n) => [n, n]);
  print(dublate);
}

Rezultat

[Ana, Mihai, Ioana, Vlad, Elena, Radu]
Total: 6 elevi
(1, 1, 2, 2, 3, 3)

Exemplul 2: followedBy: două liste parcurse una după alta

void main() {
  final moldova = ['Iași', 'Suceava'];
  final ardeal = ['Cluj', 'Sibiu', 'Brașov'];
  final traseu = moldova.followedBy(ardeal);
  print(traseu);
  print('Ultima oprire: ${traseu.last}');
}

Rezultat

(Iași, Suceava, Cluj, Sibiu, Brașov)
Ultima oprire: Brașov

Greșeli frecvente

  • Folosești map în loc de expand și obții un iterable de liste (([Ana, Mihai], [Ioana])) în loc de un iterable de nume.

Comenzi înrudite

  • Iterable.map: Transformă fiecare element cu o funcție și returnează un iterable nou, leneș, cu rezultatele.
  • List.add: add adaugă un element la sfârșitul listei; addAll adaugă toate elementele unei alte colecții.
  • List.operator+: a + b creează o listă nouă cu elementele lui a urmate de cele ale lui b.
  • Stream.expand: Înlocuiește fiecare valoare a stream-ului cu zero, una sau mai multe valori dintr-un Iterable.