Liste sortieren Alternative in c #
-
11-09-2019 - |
Frage
Ich habe eine Reihe von Objekten, die alle aus der gleichen Klasse (ColorNum) Jedes Objekt hat 2 Mitglied variabels (m_color und m_Number)
Beispiel:
ColorNum1(Red,25)
ColorNum2(Blue,5)
ColorNum3(Red,11)
ColorNum4(White,25)
Die 4 Objekte sind in dem ColorNumList
List<ColorNum> ColorNumList = new List<ColorNum>();
Jetzt möchte ich die Liste, um zu bestellen, so dass die Objekte mit M-Color = „Red“ in der Spitze. Ich dont care über die Reihenfolge der übrigen Objekte.
Was sollte mein Prädikat Methode aussehen?
Lösung
Mit Linq:
var sortedRedAtTop =
from col in ColorNumList
order by col.Color == Red ? 1 : 2
select col;
oder die Sortiermethode Liste:
ColorNumList.Sort( (x,y) =>
(x.Color == Red ? 1 : 2)-(y.Color == Red ? 1 : 2) );
Andere Tipps
ColorNumList.Sort((x, y) => x.m_Color == Red ? 1 : (y.m_Color == Red ? -1 : 0));
Siehe http: // msdn .microsoft.com / en-us / library / system.array.sort (VS.71) aspx
[C #] public static void Sort (Array, Array, int, int, IComparer);
Sie müssen eine Funktion implementieren, die zwei Objekte vergleicht und einen Wert zurück, der angibt, ob ein kleiner als, gleich oder größer ist als die andere.
http: // msdn.microsoft.com/en-us/library/system.collections.icomparer.compare(VS.71).aspx
Sie müssen eine Klasse schreiben, die die IComparer-Schnittstelle implemenets.
Ich habe nicht C # benutzen, aber hier ist die VB-äquivalent:
Klasse ColorCompare Implementiert IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim xc As ColorNum = TryCast(x, ColorNum)
Dim yc As ColorNum = TryCast(y, ColorNum)
If x.color = Red Then
Return 1
ElseIf y.color = Red Then
Return -1
Else
Return 0
End If
End Function
End Class