2016-12-13 4 views
-6

Я добавляю данные в коллекцию, которую я хочу сортировать, исходя из даты. Я хочу организовать данные в коллекции таким образом, чтобы все прошлые даты или текущие даты должны были быть наверху, а все будущие даты должны быть внизу, после прошлых текущих дат.Как сортировать данные коллекции по возрастанию или по убыванию?

Я делаю что-то вроде этого, как указано ниже

objList.Name = ' Here I am getting the name 
objList.CurDate = ' Here I am getting the current date 
obJList.EventDate = ' Here I am getting the event date 

тогда я добавляю вышеуказанную запись в коллекции.

Dim colEvents As New Collection 
colEvents.Add(objList) 

После этого я хочу, чтобы проверить, если EventDate <= CurDate, то отсортировать данные в коллекции, такие, что прошлые и нынешние даты расположены в верхней части, и будущие даты приходят после прошлой и текущей даты.

ПРИМЕЧАНИЕ: EventDate может быть минута, будущее или текущая дата.

Может кто-то, пожалуйста, помогите мне понять, как я могу это достичь?

+0

Почему вы должны CurDate в каждом объекте? Разве это не одно и то же для каждого (сегодня)? – djv

+1

И вы застряли в 'Collection'? Есть гораздо лучшие способы хранения данных с помощью .NET. – djv

+0

И какова точка проверки того, была ли дата события в прошлом перед сортировкой, т. Е. * Check-if EventDate <= CurDate, а затем сортировать *? – djv

ответ

0

Существует нет родного способа сортировки Microsoft.VisualBasic.Collection. Я предлагаю преобразование в более новый тип, такой как List(Of T).

Во всяком случае, вот пример преобразования Collection к List(Of T)

Определите класс, который держит свои события. Вы не предоставили его. Я думаю,

Class myEvent 
    Public Property Name As String 
    Public Property CurDate As DateTime 
    Public Property EventDate As DateTime 
End Class 

Теперь сделайте несколько событий и добавьте их в коллекцию. Я добавляю их из строя

Dim colEvents As New Collection() 

Dim objList1 As New myEvent() 
objList1.Name = "Name1" 
objList1.EventDate = New DateTime(2016, 12, 20) 
objList1.CurDate = DateTime.Now 
colEvents.Add(objList1) 

Dim objList2 As New myEvent() 
objList2.Name = "Name2" 
objList2.EventDate = New DateTime(2016, 12, 5) 
objList2.CurDate = DateTime.Now 
colEvents.Add(objList2) 

Dim objList3 As New myEvent() 
objList3.Name = "Name3" 
objList3.EventDate = New DateTime(2016, 12, 10) 
objList3.CurDate = DateTime.Now 
colEvents.Add(objList3) 

Вот где он может быть преобразован в List(Of myEvent) и сортируются в то же время. О, поскольку это не примитивный тип, вы должны предоставить функцию OrderBy, чтобы он знал, как сортировать.Эта функция просто возвращает EventDate

Dim eventsList As New List(Of myEvent)(
    colEvents. 
    OfType(Of myEvent). 
    OrderBy(Function(l As myEvent) l.EventDate)) 

Просто, чтобы подтвердить заказ, распечатать содержимое обоих объектов

Console.WriteLine("Collection:") 
For Each c As myEvent In colEvents 
    Console.WriteLine(
     String.Format("Name: {0}, Event date: {1}", 
         c.Name, c.EventDate)) 
Next 

Console.WriteLine("List:") 
For Each l In eventsList 
    Console.WriteLine(
     String.Format("Name: {0}, Event date: {1}", 
         l.Name, l.EventDate)) 
Next 

Выход:

Коллекция:
Имя: Name1, дата события : 12/20/2016 12:00:00 AM
Имя: Name2, Дата события: 05/12/2016 12:00:00 AM
Имя: name3 Дата события: 12/10/2016 12:00:00 AM
Список:
Имя: Name2 Дата события: 12/5/2016 12:00:00 AM
Имя: Name1, дата события: 12/10/2016 12:00:00 AM
Имя: name3 дата события: 12/20/2016 12:00:00 AM

Я интерпретировал ваше заявление Я хочу, чтобы проверить, EventDate < = CurDate, затем сортируйте данные в коллекции так, чтобы прошлые и текущие даты были расположены вверху, а будущие даты начинаются после прошлых и текущих дат, чтобы просто означать, что вы хотите сортировать по возрастанию и что CurDate не служит никакой цели. Если это неверно, пожалуйста, уточните, и мы можем исправить в моем примере лямбда OrderBy.

И если вы действительно застряли Collection см this similar question, связанные с сортировкой коллекции VBA

Смежные вопросы