我正试图找出一种方法来拆分包含日期的列表。我将尽可能简单地尝试解释。
因此,在上图中,列表1是原始列表,列表2是新列表。但是,新列表可以是此网格中7天的任何其他选择。
结果将是2个新列表或3个新列表。 2如果新列表开始或完成原始列表。 3如果碰巧像图片中那样拆分它。
就上图而言,结果将是;
提前致谢。
答案 0 :(得分:1)
我使用私有枚举来完成这项工作,以跟踪两个列表的匹配日期之间的状态:
Private Enum DateStatus
NoMatching
OneMatching
AllMatching
End Enum
Private Function SplitDates(listOne As IEnumerable(Of Date), _
listTwo As IEnumerable(Of Date)) _
As IEnumerable(Of IEnumerable(Of Date))
Dim results As New List(Of List(Of Date))
Dim listStatus As DateStatus = DateStatus.NoMatching
Dim startDate As New Date(Math.Min(listOne.First.Ticks, listTwo.First.Ticks))
Dim finalDate As New Date(Math.Max(listOne.Last.Ticks, listTwo.Last.Ticks))
Dim curDate As Date = startDate
While curDate <= finalDate
If listOne.Contains(curDate) And listTwo.Contains(curDate) Then
If listStatus <> DateStatus.AllMatching Then
listStatus = DateStatus.AllMatching
results.Add(New List(Of Date))
End If
ElseIf Not listOne.Contains(curDate) And Not listTwo.Contains(curDate) Then
listStatus = DateStatus.NoMatching
Else
If listStatus <> DateStatus.OneMatching Then
listStatus = DateStatus.OneMatching
results.Add(New List(Of Date))
End If
End If
If listStatus <> DateStatus.NoMatching Then
results.Last.Add(curDate)
End If
curDate = curDate.AddDays(1)
End While
Return results
End Function