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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top