我有一个日期列表以及在这些日期发生的活动列表,如下所示:
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
答案 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))