List.sort în Dart

List: liste Dart 2.0

Sortează lista pe loc, crescător sau după o funcție de comparare.

Sintaxă
void sort([int compare(E a, E b)?])

Ce face List.sort

sort() fără argumente ordonează crescător elementele care știu să se compare (int, double, String). Textele sunt ordonate după codurile caracterelor: majusculele înaintea minusculelor, iar literele cu diacritice după z.

Cu o funcție compare(a, b) alegi tu ordinea: funcția returnează un număr negativ dacă a vine înainte, pozitiv dacă vine după și 0 dacă sunt egale. Cel mai simplu este a.compareTo(b); pentru descrescător, b.compareTo(a). Sortarea modifică lista și nu returnează nimic.

Sortarea nu este garantat stabilă: elementele egale pot schimba ordinea între ele. Dacă ordinea lor contează, adaugă un al doilea criteriu în funcția de comparare.

Parametri

Parametru Descriere
compare Opțional: funcția care compară două elemente.

Ce returnează

Nimic (void); lista este sortată pe loc.

Exemple

Exemplul 1: Crescător, descrescător și texte

void main() {
  final note = [8, 10, 5, 9];
  note.sort();
  print(note);
  note.sort((a, b) => b.compareTo(a));
  print(note);

  final orase = ['cluj', 'Iași', 'arad', 'Brașov'];
  orase.sort();
  print(orase);
  orase.sort((a, b) => a.toLowerCase().compareTo(b.toLowerCase()));
  print(orase);
}

Rezultat

[5, 8, 9, 10]
[10, 9, 8, 5]
[Brașov, Iași, arad, cluj]
[arad, Brașov, cluj, Iași]

Exemplul 2: Sortare după mai multe criterii

void main() {
  final elevi = [('Mihai', 9), ('Ana', 10), ('Ioana', 9), ('Vlad', 7)];
  elevi.sort((a, b) {
    final dupaNota = b.$2.compareTo(a.$2);
    return dupaNota != 0 ? dupaNota : a.$1.compareTo(b.$1);
  });
  for (final (nume, nota) in elevi) {
    print('$nota $nume');
  }
}

Rezultat

10 Ana
9 Ioana
9 Mihai
7 Vlad

Greșeli frecvente

  • Scrii final sortata = lista.sort();: sort returnează void. Sortează lista, apoi folosește-o; pentru o copie sortată: [...lista]..sort().
  • Apelezi sort() fără funcție pe obiecte proprii care nu implementează Comparable: apare eroare la rulare.

Comenzi înrudite

  • List.shuffle: Amestecă elementele listei pe loc, în ordine aleatorie.
  • List.reversed: Parcurge lista de la ultimul element la primul, fără să o modifice.
  • SplayTreeMap: Map care ține cheile mereu sortate; parcurgerea și print dau cheile în ordine crescătoare.
  • SplayTreeSet: Set care ține elementele mereu sortate și fără duplicate.