Interfejs IComparable<T>
służy do porządkowania (sortowania) obiektów w typie danej klasy. Podpięcie do klasy wymaga implementacji metody CompareTo
. W nazwie T
oznacza konkretny typ, ten interfejs jest generyczny.
Implementacja metody CompareTo(T)
musi zwracać liczbę typu int
wg następujących właściwości:
- Mniej niż zero - Obiekt bieżący < other
- Zero - Obiekt bieżący = other
- Większa niż zero - other < obiekt bieżący
Przykładowa klasa Temperatura
, gdzie sortowanie jest od największej wartości do najmniejszej.
class Temperatura:IComparable<Temperatura>
{
private double wartosc;
public Temperatura(double wart)
{
this.wartosc = wart;
}
public int CompareTo(Temperatura other)
{
if (other.wartosc > this.wartosc)
{
return 1;
}
else if (other.wartosc == this.wartosc)
{
return 0;
}
else
{
return -1;
}
}
}
Pełny kod: https://github.com/pjastr/Ex501
Możemy również skorzystać z faktu, że systemowe typy (np. liczbowe, stringi, czary) mają już zaimplementowany ten interfejs. Wtedy możemy użyć nieco innej składni. Poniżej przykładowa klasa Pracownik
(sortowanie jest od najwyższego wynagrodzenia, potem wg imienia od A do Z).
class Pracownik:IComparable<Pracownik>
{
private int wynagrodzenie;
private string imie;
public int CompareTo(Pracownik other)
{
if (this.wynagrodzenie == other.wynagrodzenie)
{
return this.imie.CompareTo(other.imie);
}
return other.wynagrodzenie.CompareTo(this.wynagrodzenie);
}
public Pracownik(string imie, int wynagrodzenie)
{
this.imie = imie;
this.wynagrodzenie = wynagrodzenie;
}
public string Info()
{
return this.imie + " " + this.wynagrodzenie;
}
}
Pełny kod: https://github.com/pjastr/Ex502
Bibliografia: