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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top