30 votes

Comment trier une System.Collections.Generic.List dans VB.Net?

J'utilise une liste générique (m_equipmentList) qui est une collection d'objets (Schedule_Payitem).
Comment trier la liste selon une propriété d'objet enfant?

 Dim m_equipmentList As New List(Of Schedule_Payitem)
 

Besoin de trier m_equipmentList en fonction de la propriété resourceid de Schedule_Payitem.

56voto

Jon Skeet Points 692016

Utilisez-vous VB9? Si c'est le cas, j'utiliserais une expression lambda pour créer un Comparer(Of Schedule_PayItem) . Sinon, écrivez une classe courte pour implémenter IComparer(Of Schedule_PayItem) . passez celui que vous avez dans List.Sort.

Un exemple pour l'expression lambda (non testé):

 m_equipmentList.Sort(Function(p1, p2) p1.ResourceID.CompareTo(p2.ResourceID))
 

Et pour le IComparer(Of Schedule_PayItem) :

 Public Class PayItemResourceComparer
    Implements IComparer(Of Schedule_PayItem)
    Public Function Compare(ByVal p1 As Schedule_PayItem, _
                            ByVal p2 As Schedule_PayItem) As Integer
        Return p1.ResourceID.CompareTo(p2.ResourceID)
    End Function
End Class

...

m_equipmentList.Sort(New PayItemResourceComparer)
 

7voto

pablito Points 2905

Je ne connais pas vb.net donc je l'ai fait en C #

 m_equipmentList.Sort(
   (payItem1,payItem2)=>payItem1.ResourceID.CompareTo(payItem2.ResourceID));
 

et en utilisant le réflecteur l'a traduit sur vb.net j'espère que cela aide

 m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem) 
    Return payItem1.ResourceID.CompareTo(payItem2.ResourceID)
End Function)
 

ou vous pouvez hériter Schedule_Payitem d'IComparable et implémenter CompareTo, puis appeler simplement m_equipmentList.Sort()

5voto

rgb Points 51

Vous pouvez effectuer le tri de la liste par ordre décroissant en changeant ceci-

 m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem) 
    Return payItem1.ResourceID.CompareTo(payItem2.ResourceID)
End Function)
 

pour ça

 m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem) 
    Return payItem2.ResourceID.CompareTo(payItem1.ResourceID)
End Function)
 

1voto

cmsjr Points 16766

Essaye ça

 Dim m_equipmentList As New List(Of Schedule_Payitem)


m_equipmentList.Sort(delegate(Schedule_Payitem p1, Schedule_Payitem p2)
              {
                  return p1.resourceid .CompareTo(p2.resourceid );
              });
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X