Как отсортировать System.Collections.Generic.List в VB.Net?

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

Dim m_equipmentList As New List(Of Schedule_Payitem)

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

Спасибо, что спросили об этом. Я смог использовать лямбда-выражение Джона Скита в одном из моих проектов.

tooleb 29.05.2009 00:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
30
1
67 746
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Попробуй это

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 );
              });

VB.Net не имеет поддержки анонимных делегатов до vs2008, поэтому преобразование из этого кода может быть нетривиальным.

Joel Coehoorn 13.01.2009 18:08

Ваш код представляет собой смесь C# и VB.Net! ';' символ в конце строки предназначен для C#!

schlebe 13.07.2020 21:32

Я не знаю 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()

Это отличный способ решить множество проблем: D

CodingBarfield 02.01.2012 13:31
Ответ принят как подходящий

Вы используете 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)

Полезный совет по указанию Collections.Generic.IComparer (Of Schedule_PayItem). Я получал сообщение об ошибке: «System.Collections.IComparer» не имеет параметров типа. Небольшой поиск помог мне обнаружить, что существуют два таких интерфейса с одинаковыми именами: один в System.Collections, а другой в System.Collections.Generic.

Kyle B. 02.02.2010 23:55

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

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)

Другие вопросы по теме