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.
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()
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)
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