Maison >développement back-end >C++ >Comment un IComparer personnalisé peut-il améliorer Linq OrderBy pour le tri de chaînes non standard ?
Utilisation d'un IComparer
Dans Linq, la méthode OrderBy utilise par défaut l'ordre naturel des éléments. Cependant, lorsqu'il s'agit de types de données complexes tels que des chaînes avec un formatage spécifique, un IComparer
Un de ces scénarios consiste à trier une liste de numéros de facture au format « aaaaMMjj/nn ». L'ordre par défaut donnerait des résultats incorrects en raison de la présence de caractères numériques et alphanumériques.
Un comparateur personnalisé, MyComparer, est créé pour analyser le numéro de facture en parties et trier en fonction de celles-ci. Cependant, l'implémentation initiale de MyComparer compare uniquement les composants individuels du numéro de facture sous forme de chaînes. Cela entraîne le tri des numéros de facture lexicographique plutôt que numérique.
La version corrigée de MyComparer convertit les composants du numéro de facture en nombres entiers avant de les comparer, garantissant que le tri est effectué dans l'ordre numérique attendu. Ceci est réalisé en utilisant int.Parse() pour convertir les chaînes en entiers.
De plus, pour refléter les modifications apportées à la méthode ApplySortCore, la liste d'éléments doit être réaffectée à la propriété Items de BindingList< T>:
this.Items = items;
Avec ces modifications, MyComparer trie correctement les numéros de facture dans l'ordre souhaité, garantissant que le la liste de liaison est mise à jour en conséquence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!