J'ai une liste qui stocke une perte d'entiers. Je n'aime pas le fonctionnement par défaut de List.Sort(), car je veux que la liste soit ordonnée par la taille de l'int réel. Jusqu'ici j'ai ceci:Optimiser une liste <T> .Sort (Comparer)
Oh, et les ints sont stockés dans des chaînes, par exemple "1234". C'est quelque chose que je ne peux pas changer.
public class IntComparer : IComparer<string>
{
public int Compare(string x, string y)
{
if (x == null)
{
if (y == null)
{
// If x is null and y is null, they're
// equal.
return 0;
}
else
{
// If x is null and y is not null, y
// is greater.
return -1;
}
}
else
{
// If x is not null...
//
if (y == null)
// ...and y is null, x is greater.
{
return 1;
}
else
{
// ...and y is not null, compare the
// lengths of the two strings.
//
int xInt = Convert.ToInt32(x);
int yInt = Convert.ToInt32(y);
if (x > y)
{
// If the strings are not of equal length,
// the longer string is greater.
//
return 1;
}
else if (xInt == yInt)
{
return 0;
}
else
{
// If the strings are of equal length,
// sort them with ordinary string comparison.
//
return -1;
}
}
}
}
Mais à ma connaissance, il s'agit d'un tri des bulles, n'est-ce pas? Que devrais-je implémenter à la place? Tri rapide? aussi, je pourrais avoir besoin d'aide pour l'écrire.
Oh, et ma liste contient peu de 2 mille éléments qui stocke les numéros dans les chaînes
Aussi, j'appeler mon IComparer comme ceci:
IntComparer intSort = New IntComparer();
List<T>.Sort(intSort);
D'oh - presque identique, mais toi me battre de 3 minutes. +1 ;-p –
Eh bien, il y a une première fois pour tout :) –
Avez-vous une idée si c'est plus rapide/lent/par rapport à l'ajout de votre propre IComparer à List.Sort()? Je ne sais pas à quelle vitesse Linq peut être dans une telle situation :) – CasperT