Trier la liste alternative c #
-
11-09-2019 - |
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?
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