List.setRange în Dart

List: liste Dart 2.0

setRange suprascrie o porțiune a listei cu elemente din altă colecție; List.copyRange copiază dintr-o listă în alta.

Sintaxă
void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0])
static void copyRange<T>(List<T> target, int at, List<T> source, [int? start, int? end])

Ce face List.setRange

setRange(start, end, sursa) înlocuiește elementele de pe pozițiile start … end - 1 cu primele elemente din sursa (sau cu cele de după skipCount). Lungimea listei nu se schimbă, iar sursa trebuie să aibă destule elemente.

Funcția statică List.copyRange(tinta, la, sursa, [start, end]) copiază elementele sursa[start..end) în tinta, începând de la poziția la. Funcționează și pe liste de lungime fixă, pentru că nu adaugă elemente, doar le suprascrie.

Parametri

Parametru Descriere
start, end Porțiunea suprascrisă din lista curentă.
iterable / source De unde se iau valorile noi.
skipCount Câte elemente din sursă se sar la început.
at Pentru copyRange: poziția din țintă unde începe copierea.

Ce returnează

Nimic (void).

Exemple

Exemplul 1: Suprascrierea unei porțiuni

void main() {
  final saptamana = ['-', '-', '-', '-', '-', '-', '-'];
  saptamana.setRange(0, 5, ['L', 'Ma', 'Mi', 'J', 'V']);
  print(saptamana);

  final note = [0, 0, 0, 0];
  note.setRange(1, 3, [5, 9, 10, 7], 2);
  print(note);
}

Rezultat

[L, Ma, Mi, J, V, -, -]
[0, 10, 7, 0]

Exemplul 2: List.copyRange într-o listă de lungime fixă

void main() {
  final buffer = List.filled(6, 0);
  final pachet = [7, 8, 9, 10];
  List.copyRange(buffer, 2, pachet, 0, 3);
  print(buffer);
  List.copyRange(buffer, 0, pachet, 3);
  print(buffer);
}

Rezultat

[0, 0, 7, 8, 9, 0]
[10, 0, 7, 8, 9, 0]

Greșeli frecvente

  • Sursa are mai puține elemente decât porțiunea de suprascris: apare StateError (Too few elements).

Comenzi înrudite

  • List.fillRange: fillRange pune aceeași valoare pe o porțiune; replaceRange înlocuiește o porțiune cu alte elemente, de orice lungime.
  • List.sublist: sublist copiază o porțiune a listei într-o listă nouă; getRange dă aceeași porțiune ca iterable leneș.
  • List.insert: Inserează un element (insert) sau mai multe (insertAll) la o poziție, mutând restul la dreapta.