Feedback

C# - Comparison erstellen

Veröffentlicht von am 1/20/2014
(0 Bewertungen)
Man kann bei den Sortiermethoden von LINQ (Bsp.: OrderBy) zusätzlich einen Comparison angeben. Dieser hat als Vorraussetzung, das er von IComparer<TKey> abgeleitet ist. Man kann sich nun entweder einen eigenen Typ erstellen, welcher diese Schnittstelle implementiert, oder die Statische Create-Methode verwenden.

Dieser Methode muss man eine Methode übergeben, welche die Sortierreihenfolge angibt:
x / y => RÜCKGABE
x vor y => -1
x neben y => 0
x nach y => 1
Natürlich kann diese Methode auch ein Lambdaausdruck sein.

Dieses Snippet demonstriert die Sortierung von Zahlen nach "gerade" bzw. ungerade"

Benötigte Namespaces
System.Collections.Generic
System.Linq (für LINQ-Erweiterungsmethoden, bspws. OrderBy)

Getestete Plattformen
Windows Konsole
Hierbei sollte man annehmen, das es auf alles Plattformen läuft, die LINQ unterstützen. Die statische Create-Methode ist laut MSDN ab .NET 4.5 verfügbar.

MSDN Artikel
Create-Methode
http://msdn.microsoft.com/de-de/library/hh737198.aspx
LINQ-Abfrageausdrücke (C#-Programmierhandbuch)
http://msdn.microsoft.com/de-de/library/bb397676.aspx
IComparable-Schnittstelle
http://msdn.microsoft.com/de-de/library/system.icomparable.aspx
int[] nums = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
nums = nums.OrderBy(x => x, Comparer<int>.Create((x, y) =>
{
    if (x % 2 == y % 2)//Beide gerade bzw. ungerade
        return 0;
    if (x % 2 < y % 2)
        return -1;//x is gerade, y nicht
    else
        return 1;//y is gerade, x nicht
})).ToArray();
Abgelegt unter OrderBy, Comparer, Create, Listen, Array, Comparison, LINQ.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!