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
Libérer: 2025-01-03 09:49:40
original
693 Les gens l'ont consulté

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]));
        }
    }
}
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal