ATTENZIONE: Questo sito impiega diversi tipi di cookies. Alla pagina MAGGIORI INFORMAZIONI è possibile avere informazioni aggiuntive. Cliccando su ACCETTO o continuando a navigare sul sito acconsenti al loro utilizzo.
<ottobre 2021>
lunmarmergiovensabdom
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

C# - Ordinare una List di oggetti


Pubblicato il 06/04/2021
Letto 72 volte





Per ordinare una List di oggetti è necessario usare delle classi di appoggio che implementano l'interfaccia IComparer.
Facciamo un esempio: ho una lista di squadre di calcio, con i relativi punti in classifica. Questa la mia classe:
    class CClassifica
    {
        public string SQUADRA { get; set; }  
        public int PUNTI { get; set; }         
    }
Questa la classe che implementa l'interfaccia IComparer:
    class MyOrderingClass : IComparer<CClassifica>
    {
        public int Compare(CClassifica x, CClassifica y)
        {
            int compareDate = y.PUNTI.CompareTo(x.PUNTI);
            if (compareDate == 0)
            {
                return x.SQUADRA.CompareTo(y.SQUADRA);
            }
            return compareDate;
        }
    }
Notare che viene fatta la comparazione tra il valore del campo PUNTI, e nel caso ci sia un'uguaglianza, allora viene fatta la comparazione per il campo SQUADRA: ovvero, in caso di squadre a paripunti la classifica viene ordinata per ordine alfabetico.
Ora carico nella mia lista alcuni dati:
    List<CClassifica> myList = new List<CClassifica>();
    CClassifica myCl = new CClassifica();
    myCl.SQUADRA="Roma";
    myCl.PUNTI=30;
    myList.Add(myCl);

    myCl = new CClassifica();
    myCl.SQUADRA="Lazio";
    myCl.PUNTI=27;
    myList.Add(myCl);


    myCl = new CClassifica();
    myCl.SQUADRA="Inter";
    myCl.PUNTI=29;
    myList.Add(myCl);

    ...
Per ordinare questi dati creo un oggetto di tipo MyOrderingClass e richiamo il metodo sort della lista passando come parametro l'oggetto creato:
    IComparer<CClassifica> comparer = new MyOrderingClass();
    myList.Sort(comparer);
Risultato finale:
    Roma     30
    Inter    29
    Lazio    27
Roma campione d'italia (speriamo!)
 

Notifiche