J'ai une ArrayList qui contient un grand nombre de chaînes. Il doit être trié sur la base de trois champs (essentiellement trois sous-chaînes) qui sont Nom, Âge et Amt. Âge est la première sous-chaîne (position 0-3), Nom est deuxième (3-6) et Amt est le dernier (6-10). L'ordre dans lequel ces paramètres doivent être classés est très important et est la suivante:ArrayList Tri
d'abord effectuer ascendant Trier par Nom faire alors ascendant Tri âge (qui vient en fait plus tôt dans la sous-chaîne) et ALORS décroissant trier par Amt. C'est tout.
J'ai cette classe
public class ArrComparer : IComparer
{
public int Compare(object x, object y)
{
string left = x.ToString();
string right = y.ToString();
string lhs = left.Substring(3, 6);
string rhs = right.Substring(3, 6);
return lhs.CompareTo(rhs);
}
}
que j'utilise pour trier basé sur un seul champ - Nom en invoquant
RecordList.Sort(new ArrComparer());
Cela me permet correctement basé sorte que un champ. La question est comment puis-je modifier ce code pour me permettre de trier en fonction des trois AT ONCE, dans le bon ordre et en utilisant le mode asc/desc approprié?
Un code ou des astuces seraient grandement appréciés. (En passant, au cas où vous vous demandez l'utilisation générique List<T>
n'est pas une option dans ce projet).
Pourquoi une liste générique "n'est pas une option"? Pourquoi n'utilisez-vous pas des objets avec trois champs au lieu de chaînes? –
LINQ est-elle une option? – JasonCoder
Ça vous dérange de dire pourquoi les listes génériques ne sont pas une option? –