Feedback

Comparison erstellen

Sprache: C#

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" [b]Benötigte Namespaces[/b] System.Collections.Generic System.Linq (für LINQ-Erweiterungsmethoden, bspws. OrderBy) [b]Getestete Plattformen[/b] 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. [b]MSDN Artikel[/b] 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();
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();