Comment trier un système.Collection.Générique.Liste dans VB.Net?

J'utilise une liste genrique (m_equipmentList) qui est une collection d'objets (Schedule_Payitem).
Comment trier la liste selon une proerty d'objet enfant ?

Dim m_equipmentList As New List(Of Schedule_Payitem)

Besoin de trier m_equipmentList sur la base de la propriété resourceid de Schedule_Payitem.

30
demandé sur Nakul Chaudhary 2009-01-13 14:41:08

4 réponses

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 la liste.Sorte.

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

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)
56
répondu Jon Skeet 2009-01-13 12:03:36

Je ne sais 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 traduit à vb.net j'espère que ça 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 de IComparable et implémenter CompareTo, puis appeler simplement m_equipmentList.Sort()

7
répondu Pablo Retyk 2009-01-13 12:03:01

Vous pouvez effectuer le tri de la liste dans l'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)

À ce

m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem) 
    Return payItem2.ResourceID.CompareTo(payItem1.ResourceID)
End Function)
5
répondu rgb 2011-04-12 18:37:30

Essayez ceci

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 );
              });
1
répondu cmsjr 2009-01-13 11:55:14