Question

I ai un certain nombre d'objets, tous de la même classe (ColorNum) chaque objet a deux variabels élément (m_Color et m_Number)

Exemple:

ColorNum1(Red,25)
ColorNum2(Blue,5)
ColorNum3(Red,11)
ColorNum4(White,25)

Les 4 objets se trouvent dans la ColorNumList

List<ColorNum> ColorNumList = new List<ColorNum>();

Maintenant, je veux commander la liste de sorte que les objets avec mColor = « Red » est en haut. Je ne se soucient de l'ordre des objets restants.

Quelle devrait être ma méthode sous-jacente ressembler?

Était-ce utile?

La solution

LINQ:

var sortedRedAtTop = 
    from col in ColorNumList 
    order by col.Color == Red ? 1 : 2
    select col;

Ou la méthode de tri de la liste:

ColorNumList.Sort( (x,y) => 
    (x.Color == Red ? 1 : 2)-(y.Color == Red ? 1 : 2) );

Autres conseils

ColorNumList.Sort((x, y) => x.m_Color == Red ? 1 : (y.m_Color == Red ? -1 : 0));

Voir http: // msdn .microsoft.com / fr-fr / bibliothèque / system.array.sort (VS.71) .aspx

[C #] public static void Trier (Array, Array, int, int, IComparer);

Il faut mettre en oeuvre une fonction qui compare deux objets et renvoie une valeur indiquant si l'un est inférieur, égal ou supérieur à l'autre.

http: // msdn.microsoft.com/en-us/library/system.collections.icomparer.compare(VS.71).aspx

Vous devez écrire une classe qui implemenets l'interface IComparer.

Je n'ai pas été en utilisant C #, mais voici l'équivalent VB:

Classe ColorCompare         Met en œuvre 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top