Ordinare una List di oggetti
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!)