Per i casi di utilizzo semplice, consente un'implementazione molto banale:
public int compare(Child a, Child b) {
return a.age - b.age;
}
//sort children by age to determine who babysits
Nel frattempo, se è necessaria una logica più complessa, è ancora semplice restituire i numeri magici -1
, 0
o 1
una volta determinato l'ordine.
Come dice CodesInChaos nei commenti, il metodo di sottrazione non riesce a contenere eventuali overflow che possono verificarsi. Le librerie di carattere generale richiedono maggiore robustezza e complessità nei loro confronti.
Ecco un paio di implementazioni testate in battaglia:
-
Java Integer.compare()
:
public static int compare(int x, int y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
-
Mono Int32.CompareTo()
:
public int CompareTo (object value)
{
if (value == null)
return 1;
if (!(value is System.Int32))
throw new ArgumentException (Locale.GetText ("Value is not a System.Int32"));
int xv = (int) value;
if (m_value == xv)
return 0;
if (m_value > xv)
return 1;
else
return -1;
}
Come puoi vedere, entrambi applicano la logica richiesta e restituiscono il numero magico appropriato.