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șteList.generate. - Încerci
addpe o listă creată cuList.filledfărăgrowable: true: apareUnsupportedError.
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.