Ce face Enum.compareByName
Valorile enum nu sunt Comparable, deci lista.sort() fără argument nu funcționează pentru ele. Enum.compareByName le compară alfabetic după name, iar Enum.compareByIndex după poziția din declarație.
Fiind funcții statice, le dai direct ca argument: lista.sort(Enum.compareByName). Rezultatul este negativ, zero sau pozitiv, ca la orice comparator.
Parametri
| Parametru | Descriere |
|---|---|
value1, value2 |
Valorile comparate, din același enum. |
Ce returnează
Un int: negativ, 0 sau pozitiv.
Exemple
Exemplul 1: Sortare după nume și după ordine
enum Zi { luni, marti, miercuri, joi, vineri }
void main() {
var ture = [Zi.vineri, Zi.luni, Zi.joi, Zi.marti];
ture.sort(Enum.compareByName);
print(ture.map((z) => z.name).toList());
ture.sort(Enum.compareByIndex);
print(ture.map((z) => z.name).toList());
print(Enum.compareByName(Zi.joi, Zi.luni) < 0);
}
Rezultat
[joi, luni, marti, vineri]
[luni, marti, joi, vineri]
true
Exemplul 2: Grupare după categorie, în ordine alfabetică
enum Categorie { lactate, fructe, panificatie, bauturi }
void main() {
var produse = {
'Lapte': Categorie.lactate,
'Mere': Categorie.fructe,
'Pâine': Categorie.panificatie,
'Suc': Categorie.bauturi,
'Iaurt': Categorie.lactate,
};
var categorii = produse.values.toSet().toList()..sort(Enum.compareByName);
for (var c in categorii) {
var nume = produse.entries.where((e) => e.value == c).map((e) => e.key);
print('${c.name}: ${nume.join(', ')}');
}
}
Rezultat
bauturi: Suc
fructe: Mere
lactate: Lapte, Iaurt
panificatie: Pâine
Greșeli frecvente
- Apelezi
lista.sort()pe o listă de enum-uri: aruncă eroare la rulare, pentru că valorile nu suntComparable. Dă un comparator.
Comenzi înrudite
Enum.name: Numele valorii enum, ca text, exact cum este scris în declarație (fără numele tipului).Enum: Clasa de bază a tuturor tipurilor enum; index dă poziția valorii în declarație, începând de la 0.Comparable.compare: Funcție statică ce compară două valori Comparable: același rezultat ca a.compareTo(b), dar se poate da ca argument.List.sort: Sortează lista pe loc, crescător sau după o funcție de comparare.