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();:sortreturnează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.