Maison >développement back-end >C++ >Comment trier une liste à l'aide d'un IComparer personnalisé avec LINQ OrderBy ?

Comment trier une liste à l'aide d'un IComparer personnalisé avec LINQ OrderBy ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-03 09:49:40655parcourir

How to Sort a List Using a Custom IComparer with LINQ OrderBy?

Utilisation d'IComparer dans Linq OrderBy

Dans cet article, nous explorerons comment tirer parti d'un IComparer interface avec LINQ OrderBy pour obtenir un comportement de tri spécifique.

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 la classe nommée MyComparer a été implémentée. Cependant, les résultats du tri n'étaient pas satisfaisants, car le tri était basé sur l'ordre du texte par défaut, plutôt que sur la comparaison numérique prévue.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn