Comparable.compare în Dart

Funcție statică ce compară două valori Comparable: același rezultat ca a.compareTo(b), dar se poate da ca argument.

Sintaxă
static int compare(Comparable a, Comparable b)

Ce face Comparable.compare

Comparable.compare(a, b) returnează a.compareTo(b). Avantajul este că, fiind o funcție statică, o poți trimite direct ca valoare acolo unde se cere o funcție de comparare: lista.sort(Comparable.compare).

Este utilă în cod generic, de exemplu pentru un comparator implicit într-o clasă de colecție proprie, sau pentru a inversa o ordine: (a, b) => Comparable.compare(b, a).

Parametri

Parametru Descriere
a, b Valorile comparate, ambele Comparable.

Ce returnează

Un int: negativ, 0 sau pozitiv.

Exemple

Exemplul 1: Comparator dat ca argument

void main() {
  var note = [7, 10, 5, 9];
  note.sort(Comparable.compare);
  print(note);
  note.sort((a, b) => Comparable.compare(b, a));
  print(note);
  print(Comparable.compare('Iași', 'Cluj'));
  print(Comparable.compare(2.5, 2.5));
}

Rezultat

[5, 7, 9, 10]
[10, 9, 7, 5]
1
0

Exemplul 2: Un clasament generic

List<T> primele<T extends Comparable<Object>>(List<T> valori, int n, {int Function(T, T) cmp = Comparable.compare}) {
  var copie = [...valori]..sort(cmp);
  return copie.take(n).toList();
}

void main() {
  print(primele([42, 7, 19, 3, 25], 3));
  print(primele(['Vaslui', 'Arad', 'Iași', 'Bacău'], 2));
  print(primele([42, 7, 19, 3, 25], 2, cmp: (a, b) => b.compareTo(a)));
}

Rezultat

[3, 7, 19]
[Arad, Bacău]
[42, 25]

Greșeli frecvente

  • Apelezi Comparable.compare cu valori de tipuri diferite ('5' și 5): compilează, dar aruncă eroare la rulare.

Comenzi înrudite

  • Comparable: Interfața pentru obiecte care au o ordine naturală; compareTo dă negativ, zero sau pozitiv.
  • List.sort: Sortează lista pe loc, crescător sau după o funcție de comparare.