如何对日期列表进行排序并将另一个列表排序为相同的顺序? vb .net

时间:2015-04-24 15:13:20

标签: .net vb.net list sorting

如果问题措辞笨拙,我很难道歉,我真的不知道更好的解释我需要的方法。

我有一个日期列表以及在这些日期发生的活动列表,如下所示:

Datelist(0) = 06/01/2015   Activitylist(0) = Kayaking
Datelist(1) = 04/01/2015   Activitylist(1) = Rock Climbing
Datelist(2) = 01/01/2015   Activitylist(2) = Hiking
Datelist(3) = 05/01/2015   Activitylist(3) = Orienteering

所以06/01/2015皮划艇是选定的活动等等。

我想知道的是有一种方法可以重新排序两个列表,最好不使用循环和增量,这样它们就按时间顺序排列,这是最终结果:

Datelist(0) = 01/01/2015   Activitylist(0) = Hiking
Datelist(1) = 04/01/2015   Activitylist(1) = Rock Climbing
Datelist(2) = 05/01/2015   Activitylist(2) = Orienteering
Datelist(3) = 06/01/2015   Activitylist(3) = Kayaking

有没有办法在vb .net中使用visual express 2013?提前谢谢-Tom

2 个答案:

答案 0 :(得分:1)

很难判断显示的内容实际上是List(Of T)还是数组。列表似乎更像是数据显示,因为否则会出现语法问题。假设数组。

如果LastDate和Activity密切相关,最好将它们放在一个类中,而不是将各个数据位存储在它们自己的容器中并相互分离。为此,一个班级:

Public Class Activity
    Public Property Name As String
    Public Property LastDate As DateTime
    Public Property Rating As Integer

    Public Sub New(n As String, dt As DateTime)
        Name = n
        LastDate = dt
        Rating = 1          ' some default
    End Sub

End Class

然后是一个(真实的)List来存储它们:

actList = New List(Of Activity)

Dim act As Activity
act = New Activity("Kayaking", #4/1/2015#)
actList.Add(act)

' short form, no temp var:
actList.Add(New Activity("Cat Herding", #6/1/2015#))
actList.Add(New Activity("Rock Climbing", #1/1/2011#))
actList.Add(New Activity("Bicycling", #6/1/2014#))

列表比数组更容易管理,因为您不必调整它们的大小或知道提前制作它们有多大。要按日期对列表进行排序,请使用OrderBy扩展名:

actList = actList.OrderBy(Function(d) d.LastDate).ToList
' display result:
For Each a As Activity In actList
    Console.WriteLine("act: {0}  last date: {1}", a.Name, a.LastDate.ToShortDateString)
Next

结果:

  

行动:攀岩最后日期:2011年1月1日
  行动:骑自行车的最后日期:2014年6月1日
  act:皮划艇最后日期:2015年4月1日
  act:Cat Herding上次日期:2015年6月1日

答案 1 :(得分:0)

最简单的方法是将两个列表合并为一个;然后你可以按日期排序:

Dim datelist = { #06/01/2015#, #04/01/2015#, #01/01/2015#, #05/01/2015# }
Dim activities = { "Kayaking", "Rock Climbing", "Hiking", "Orienteering" }

Dim combined = datelist.Zip(activities, Function (ActivityDate, Activity) New With {ActivityDate, Activity}).ToList()

combined.Sort(Function (a, b) a.ActivityDate.CompareTo(b.ActivityDate))