Ordenar lista alternativa en c #
-
11-09-2019 - |
Pregunta
I tienen una serie de objetos, todos de la misma clase (ColorNum) Cada objeto tiene variabels 2 miembro (m_Color y m_Number)
Ejemplo:
ColorNum1(Red,25)
ColorNum2(Blue,5)
ColorNum3(Red,11)
ColorNum4(White,25)
Los 4 objetos están en la ColorNumList
List<ColorNum> ColorNumList = new List<ColorNum>();
Ahora quiero ordenar la lista por lo que los objetos con mColor = "red" se encuentra en la parte superior. No me importa el orden de los objetos restantes.
¿Qué debe mi método predicado parece?
Solución
El uso de LINQ:
var sortedRedAtTop =
from col in ColorNumList
order by col.Color == Red ? 1 : 2
select col;
O de un método para ordenar la lista:
ColorNumList.Sort( (x,y) =>
(x.Color == Red ? 1 : 2)-(y.Color == Red ? 1 : 2) );
Otros consejos
ColorNumList.Sort((x, y) => x.m_Color == Red ? 1 : (y.m_Color == Red ? -1 : 0));
http: // MSDN .microsoft.com / es-es / library / system.array.sort (VS.71) .aspx
[C #] public static void ordenar (Array, Array, int, int, IComparer);
Es necesario implementar una función que compara dos objetos y devuelve un valor que indica si uno es menor, igual o mayor que el otro.
http: // msdn.microsoft.com/en-us/library/system.collections.icomparer.compare(VS.71).aspx
Usted tiene que escribir una clase que implemenets la interfaz IComparer.
No he estado usando C #, pero aquí es el equivalente VB:
Clase ColorCompare Implementa 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