Heim >Backend-Entwicklung >C++ >Wie sortiere ich eine Liste mit einem benutzerdefinierten IComparer mit LINQ OrderBy?

Wie sortiere ich eine Liste mit einem benutzerdefinierten IComparer mit LINQ OrderBy?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-03 09:49:40658Durchsuche

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

Benutzerdefinierten IComparer verwenden in Linq OrderBy

In diesem Artikel erfahren Sie, wie Sie einen benutzerdefinierten IComparer Schnittstelle mit LINQ OrderBy, um ein spezifisches Sortierverhalten zu erreichen.

Das dargestellte Szenario umfasst eine generische Liste mit Objekten mit einer InvoiceNumber-Eigenschaft im Format „200906/1“. Das Ziel besteht darin, diese Liste gemäß einer benutzerdefinierten Sortierlogik zu sortieren, die die numerischen Werte innerhalb der InvoiceNumber-Eigenschaft berücksichtigt.

Zunächst wird ein benutzerdefinierter IComparer Klasse namens MyComparer wurde implementiert. Die Sortierergebnisse waren jedoch unbefriedigend, da auf der Grundlage der Standardtextreihenfolge und nicht auf dem beabsichtigten numerischen Vergleich sortiert wurde.

Die korrigierte MyComparer-Implementierung wird unten bereitgestellt:

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]));
        }
    }
}

Der ApplySortCore Die Methode wurde geändert, um den MyComparer zu verwenden:

case ListSortDirection.Ascending:
    MyComparer comparer = new MyComparer();
    items = items.OrderByDescending(
              x => property.GetValue(x), comparer).ToList();
    break;

Abschließend, um sicherzustellen, dass die sortierte Liste in der Grenze widergespiegelt wird Liste muss die aktualisierte Artikelsammlung der Items-Eigenschaft zugewiesen werden:

this.Items = items;

Das obige ist der detaillierte Inhalt vonWie sortiere ich eine Liste mit einem benutzerdefinierten IComparer mit LINQ OrderBy?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn