Tengo una lista de pasajeros(objeto) donde tiene diferentes propiedades..

passenger.name
passenger.age
passenger.surname

Y quiero ordenar esta lista por edad criterio, ¿cómo puedo hacer esto?

Sé que en una lista de enteros/Lista de cadenas.Sort() funciona, pero si es un objeto de la lista, no sé si es posible ordenar por el valor de una propiedad de objeto!

Gracias.

InformationsquelleAutor bombai | 2012-07-31

3 Comentarios

  1. 101

    Para ordenar por una propiedad en el objeto, tiene que especificar un comparador o un método para conseguir que la propiedad.

    El uso de la List.Sort método:

    theList.Sort(Function(x, y) x.age.CompareTo(y.age))

    El uso de la OrderBy método de extensión:

    theList = theList.OrderBy(Function(x) x.age).ToList()
    • Hola Guffa, muchas gracias! He utilizado el primer caso, y funciona, pero esta orden ascendente orden de 10>12>15 si quiero en orden descendente ¿cómo puedo hacerlo? Muchas gracias de nuevo.
    • Solo tienes que cambiar las variables de la comparación: y.age.CompareTo(x.age). Con el segundo método utiliza OrderByDescending lugar.
    • Sí! Ambos métodos funciona como un encanto! Gracias de nuevo!
    • Me costó mucho cambiar mi estructura para implementar IComparer hasta que me encontré con esto!
    • ¿Sabe usted que es más rápido?
    • Generalmente la velocidad es aproximadamente el mismo. Hay algunas diferencias que pueden afectar el rendimiento en algunos casos el borde. El primero ordena la lista en el lugar, por lo que se utiliza menos memoria. El segundo almacena el valor que se ordena en la, por lo que solo se llame a la función una vez para cada elemento.
    • Muy útil. Gracias por mantener a corto y preciso.
    • no te olvides de añadir las Importaciones del Sistema.Linq
    • Cómo ordenar de forma descendente mi variable declarada: myList as List(Of Integers) . Gracias!

  2. 4

    Si usted necesita una cadena personalizada de ordenación, puede crear una función que devuelve un número basado en el orden que especifique.

    Por ejemplo, yo tenía fotos que quería ordenar por ser parte frontal de la hebilla. Así que hice lo siguiente:

    Private Function sortpictures(s As String) As Integer
        If Regex.IsMatch(s, "FRONT") Then
            Return 0
        ElseIf Regex.IsMatch(s, "SIDE") Then
            Return 1
        ElseIf Regex.IsMatch(s, "CLASP") Then
            Return 2
        Else
            Return 3
        End If
    End Function

    Entonces yo llamo a la función de ordenación como este:

    list.Sort(Function(elA As String, elB As String)
                      Return sortpictures(elA).CompareTo(sortpictures(elB))
                  End Function)
  3. 0

    debe implementar la interfaz IComparer.

    En este ejemplo he mi objeto personalizado JSONReturn, puedo implementar en mi clase como esta :

    Friend Class JSONReturnComparer
        Implements IComparer(of JSONReturn)
    
        Public Function Compare(x As JSONReturn, y As JSONReturn) As Integer Implements    IComparer(Of JSONReturn).Compare
            Return String.Compare(x.Name, y.Name)
        End Function
    
    End Class

    Que yo llamo mi tipo método de la Lista como esta :
    alResult.Sort(nueva JSONReturnComparer())

    Tal vez podría ayudarle a

Dejar respuesta

Please enter your comment!
Please enter your name here