List.filled în Dart

List: liste Dart 2.0

List.filled creează o listă cu aceeași valoare pe fiecare poziție; List.generate calculează fiecare element din poziția lui.

Sintaxă
List<E>.filled(int length, E fill, {bool growable = false})
List<E>.generate(int length, E generator(int index), {bool growable = true})

Ce face List.filled

List.filled(n, valoare) creează o listă cu n elemente egale cu valoare. Implicit lista are lungime fixă (nu merge add); cu growable: true devine extensibilă.

List.generate(n, f) creează o listă cu elementele f(0), f(1), …, f(n - 1). Implicit este extensibilă. Este alegerea corectă pentru liste de obiecte modificabile, de exemplu o matrice: fiecare rând este un obiect nou.

Parametri

Parametru Descriere
length Numărul de elemente.
fill Pentru filled: valoarea pusă peste tot.
generator Pentru generate: funcția care primește poziția și returnează elementul.
growable Dacă lista poate crește ulterior.

Ce returnează

O List<E> nouă.

Exemple

Exemplul 1: Liste inițializate

void main() {
  final scoruri = List.filled(4, 0);
  scoruri[2] = 15;
  print(scoruri);

  final patrate = List.generate(5, (i) => i * i);
  print(patrate);
  final etichete = List.generate(3, (i) => 'Sala ${i + 101}');
  print(etichete);
}

Rezultat

[0, 0, 15, 0]
[0, 1, 4, 9, 16]
[Sala 101, Sala 102, Sala 103]

Exemplul 2: Matrice: filled vs generate

Cu filled, toate rândurile sunt aceeași listă, deci o modificare apare în fiecare rând. Cu generate, fiecare rând este o listă nouă.

void main() {
  final gresit = List.filled(3, List.filled(3, 0));
  gresit[0][0] = 1;
  print(gresit);

  final corect = List.generate(3, (_) => List.filled(3, 0));
  corect[0][0] = 1;
  print(corect);
}

Rezultat

[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

Greșeli frecvente

  • Faci o matrice cu List.filled(n, List.filled(m, 0)): toate rândurile sunt același obiect. Folosește List.generate.
  • Încerci add pe o listă creată cu List.filled fără growable: true: apare UnsupportedError.

Comenzi înrudite

  • List: Lista din Dart: elemente în ordine, accesate după poziție, care poate crește sau scădea.
  • List.from: Creează o listă nouă cu elementele unei colecții; of verifică tipul la compilare, from la rulare.
  • List.empty: List.empty creează o listă goală; List.unmodifiable creează o copie care nu mai poate fi schimbată.
  • Iterable: Tipul de bază pentru orice colecție care poate fi parcursă element cu element: List, Set, cheile unui Map.
  • List.fillRange: fillRange pune aceeași valoare pe o porțiune; replaceRange înlocuiește o porțiune cu alte elemente, de orice lungime.