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();
Kommentare zum Snippet