Skip to content

Instantly share code, notes, and snippets.

@pjastr
Last active November 2, 2017 22:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pjastr/f401d74871115283c8f0487580e8e1c5 to your computer and use it in GitHub Desktop.
Save pjastr/f401d74871115283c8f0487580e8e1c5 to your computer and use it in GitHub Desktop.

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:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment