Ce face List.sublist
sublist(start, end) returnează o listă nouă cu elementele de pe pozițiile start … end - 1. Fără end, merge până la final. Este o copie: modificarea ei nu schimbă lista inițială.
getRange(start, end) returnează aceleași elemente ca iterable leneș, fără copiere. Ambele aruncă RangeError dacă pozițiile ies din listă; pentru variante tolerante folosește skip și take.
Parametri
| Parametru | Descriere |
|---|---|
start |
Prima poziție inclusă. |
end |
Poziția de după ultimul element (nu este inclusă). |
Ce returnează
sublist: o List nouă. getRange: un Iterable.
Exemple
Exemplul 1: Bucăți dintr-o listă
void main() {
final luni = ['ian', 'feb', 'mar', 'apr', 'mai', 'iun'];
print('T1: ${luni.sublist(0, 3)}');
print('T2: ${luni.sublist(3)}');
print('getRange: ${luni.getRange(1, 4)}');
final copie = luni.sublist(0, 2);
copie[0] = 'IANUARIE';
print('$copie / ${luni.first}');
}
Rezultat
T1: [ian, feb, mar]
T2: [apr, mai, iun]
getRange: (feb, mar, apr)
[IANUARIE, feb] / ian
Exemplul 2: Poziții în afara listei
void main() {
final note = [9, 8, 10];
try {
print(note.sublist(1, 5));
} on RangeError catch (e) {
print(e);
}
print('tolerant: ${note.skip(1).take(4).toList()}');
}
Rezultat
RangeError (end): Invalid value: Not in inclusive range 1..3: 5
tolerant: [8, 10]
Greșeli frecvente
- Dai lungimea porțiunii ca al doilea argument (
sublist(2, 3)pentru „3 elemente de la 2”). Al doilea argument este poziția de final:sublist(2, 5).
Comenzi înrudite
Iterable.take: take păstrează primele n elemente, skip sare peste primele n elemente.List.removeRange: removeRange șterge elementele dintre două poziții; clear golește toată lista.List.setRange: setRange suprascrie o porțiune a listei cu elemente din altă colecție; List.copyRange copiază dintr-o listă în alta.