Как отсортировать System.Collections.Generic.List в VB.Net? - PullRequest
30 голосов
/ 13 января 2009

Я использовал список родов (m_equipmentList), который является коллекцией объектов (Schedule_Payitem).
Как можно отсортировать список по свойствам дочернего объекта?

Dim m_equipmentList As New List(Of Schedule_Payitem)

Необходимо отсортировать m_equipmentList на основе свойства resourceid Schedule_Payitem.

Ответы [ 4 ]

56 голосов
/ 13 января 2009

Вы используете VB9? Если это так, я бы использовал лямбда-выражение для создания Comparer(Of Schedule_PayItem). В противном случае напишите короткий класс для реализации IComparer(Of Schedule_PayItem). передать тот, который у вас есть в List.Sort.

Пример лямбда-выражения (не проверено):

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

А для 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)
7 голосов
/ 13 января 2009

Я не знаю vb.net, поэтому я сделал это в C #

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

и с помощью отражателя перевел его на vb.net, надеюсь, это поможет

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

или вы можете наследовать Schedule_Payitem от IComparable и реализовать CompareTo, а затем просто вызвать m_equipmentList.Sort()

5 голосов
/ 11 апреля 2011

Вы можете выполнить сортировку списка в порядке убывания, изменив это-

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

к этому

m_equipmentList.Sort(
Function (ByVal payItem1 As Schedule_Payitem, ByVal payItem2 As Schedule_Payitem) 
    Return payItem2.ResourceID.CompareTo(payItem1.ResourceID)
End Function)
1 голос
/ 13 января 2009

Попробуйте это

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 );
              });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...