Heim >Backend-Entwicklung >C++ >Wie sortiere ich eine Liste mit einem benutzerdefinierten IComparer mit LINQ OrderBy?
In diesem Artikel erfahren Sie, wie Sie einen benutzerdefinierten IComparer
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
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!