web-dev-qa-db-fra.com

Trier une liste d'objets dans VB.NET

J'ai une liste de passagers (objet) où il a différentes propriétés.

passenger.name
passenger.age
passenger.surname

Et je veux trier cette liste par critère d'âge, comment puis-je faire cela?

Je sais que dans une liste d'entier/chaîne, List.Sort () fonctionne, mais si est une liste d'objets, je ne sais pas s'il est possible de trier par la valeur d'une propriété d'objet!

Merci.

38
bombai

Pour trier une propriété dans l'objet, vous devez spécifier un comparateur ou une méthode pour obtenir cette propriété.

En utilisant la méthode List.Sort:

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

En utilisant la méthode d'extension OrderBy:

theList = theList.OrderBy(Function(x) x.age).ToList()
91
Guffa

Si vous avez besoin d'un tri de chaîne personnalisé, vous pouvez créer une fonction qui renvoie un nombre basé sur l'ordre que vous spécifiez.

Par exemple, j'avais des images que je voulais trier en fonction de la face avant ou du fermoir. Alors j'ai fait ce qui suit:

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

Ensuite, j'appelle la fonction de tri comme ceci:

list.Sort(Function(elA As String, elB As String)
                  Return sortpictures(elA).CompareTo(sortpictures(elB))
              End Function)
4
user890332

vous devez implémenter l'interface IComparer.

Dans cet exemple, j'ai mon objet personnalisé JSONReturn, j'implémente ma classe comme ceci:

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

J'appelle ma méthode de liste de tri comme ceci: alResult.Sort (new JSONReturnComparer ())

Peut-être que cela pourrait vous aider

0