Maison >développement back-end >C++ >Comment trier une liste à l'aide d'un IComparer personnalisé avec LINQ OrderBy ?
Dans cet article, nous explorerons comment tirer parti d'un IComparer
Le scénario présenté implique une liste générique contenant des objets avec une propriété InvoiceNumber formatée comme "200906/1". L'objectif est de trier cette liste selon une logique de tri personnalisée qui prend en compte les valeurs numériques de la propriété InvoiceNumber.
Initialement, un IComparer
L'implémentation corrigée de MyComparer est fournie ci-dessous :
public class MyComparer : IComparer<Object> { public int Compare(Object stringA, Object stringB) { string[] valueA = stringA.ToString().Split('/'); string[] valueB = stringB.ToString().Split('/'); if (valueA.Length != 2 || valueB.Length != 2) { return stringA.ToString().CompareTo(stringB.ToString()); } // Note: do error checking and consider i18n issues too :) if (valueA[0] == valueB[0]) { return int.Parse(valueA[1]).CompareTo(int.Parse(valueB[1])); } else { return int.Parse(valueA[0]).CompareTo(int.Parse(valueB[0])); } } }
Le ApplySortCore La méthode a été modifiée pour utiliser MyComparer :
case ListSortDirection.Ascending: MyComparer comparer = new MyComparer(); items = items.OrderByDescending( x => property.GetValue(x), comparer).ToList(); break;
Enfin, pour garantir que la liste triée est reflétée dans la liste liée, la collection d'éléments mise à jour doit être affectée à la propriété Items :
this.Items = items;
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!