如何按升序或降序对集合数据进行排序?

时间:2016-12-13 18:14:14

标签: vb.net sorting

我在一个集合中添加数据,我想根据日期排序。我想以这样的方式组织集合中的数据:所有过去的日期或当前日期应该在顶部,并且所有未来日期应该在过去的当前日期之后到达底部。

我正在做这样的事情,如下所述

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可以过去,将来或当前日期

有人可以帮助我了解我该如何实现这一目标?

1 个答案:

答案 0 :(得分: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

输出:

  

收集:   
姓名:姓名1,活动日期:12/20/2016 12:00:00 AM   
姓名:姓名2,活动日期:12/5/2016 12:00:00 AM   
姓名:姓名3,活动日期:12/10/2016 12:00:00 AM   
列表:   
姓名:姓名2,活动日期:12/5/2016 12:00:00 AM   
姓名:姓名1,活动日期:12/10/2016 12:00:00 AM   
姓名:姓名3,活动日期:12/20/2016 12:00:00 AM

我解释了你的陈述我想检查EventDate&lt; = CurDate,然后对集合中的数据进行排序,使得过去和当前日期排列在顶部,未来日期排在过去和当前日期之后< / em>,简单地表示您希望按升序排序,CurDate不能用于任何目的。如果这是错误的,那么请澄清,我们可以在我的例子中修复OrderBy lambda。

如果您真的遇到Collection,请参阅与排序VBA集合相关的this similar question