[英]I need a recursive function to remove periods of time from other periods of time
我將嘗試盡可能明確,因為這是我的第一個問題。 我有一個正在處理的項目可以處理約會。 在篩選出可供人們請求約會的可用時隙時,我遇到了麻煩。 我定義了一段時間的類,如下所示:
Public Class TimePeriod
#Region "Private Variables"
Private _startTime As TimeSpan
Private _endTime As TimeSpan
#End Region
#Region "Public Properties"
Public Property StartTime As TimeSpan
Get
Return Me._startTime
End Get
Set(value As TimeSpan)
Me._startTime = value
End Set
End Property
Public Property EndTime As TimeSpan
Get
Return Me._endTime
End Get
Set(value As TimeSpan)
Me._endTime = value
End Set
End Property
#End Region
#Region "Constructors"
Public Sub New()
Me.New(New TimeSpan(0, 0, 0), New TimeSpan(0, 0, 0))
End Sub
Public Sub New(StartTime As TimeSpan, EndTime As TimeSpan)
Me._startTime = StartTime
Me._endTime = EndTime
End Sub
#End Region
End Class
Public Class TimePeriodFunctions
Public Shared Function RemoveTimePeriod(MasterTimePeriod As TimePeriod, TimePeriodToRemove As TimePeriod) As System.Collections.Generic.List(Of TimePeriod)
'SEE FIRST IF THERE IS ANY OVERLAP
If (TimePeriodToRemove.StartTime >= MasterTimePeriod.StartTime And TimePeriodToRemove.StartTime <= MasterTimePeriod.EndTime) Or _
(TimePeriodToRemove.EndTime >= MasterTimePeriod.StartTime And TimePeriodToRemove.EndTime <= MasterTimePeriod.EndTime) Then
Dim TimePeriods As New System.Collections.Generic.List(Of TimePeriod)
If TimePeriodToRemove.StartTime >= MasterTimePeriod.StartTime And TimePeriodToRemove.StartTime <= MasterTimePeriod.EndTime And _
MasterTimePeriod.StartTime <> TimePeriodToRemove.StartTime Then
'TIME TO RETURN IS FROM MASTERTIMEPERIOD.STARTTIME TO TIMEPERIODTOREMOVE.STARTTIME
TimePeriods.Add(New TimePeriod(MasterTimePeriod.StartTime, TimePeriodToRemove.StartTime))
End If
If TimePeriodToRemove.EndTime >= MasterTimePeriod.StartTime And TimePeriodToRemove.EndTime <= MasterTimePeriod.EndTime And _
TimePeriodToRemove.EndTime <> MasterTimePeriod.EndTime Then
'TIME TO RETURN IS FROM TIMEPERIODTOREMOVE.ENDTIME TO MASTERTIMEPERIOD.ENDTIME
TimePeriods.Add(New TimePeriod(TimePeriodToRemove.EndTime, MasterTimePeriod.EndTime))
End If
Return TimePeriods
Else
'IF THERE IS NO OVERLAP, THEN RETURN AN EMPTY COLLECTION
Return New System.Collections.Generic.List(Of TimePeriod)
End If
End Function
End Class
現在,如果我有一個TimePeriod,它表示可用於進行約會的時間段,例如StartTime = 9:00和EndTime = 5:00,並且我有一個各種當前預定約會的通用列表(例如9:30-10: 00,10:00-11:00),我將如何編寫一個遞歸函數以返回尚可用時間段的通用列表(例如,如果不清楚,則從可用時間段中刪除塊)?
在您的TimePeriod類中設置一個布爾屬性(可能名為IsBusy)。 然后,您可以編寫一個lambda來查詢IsBusy = False的列表。
另外請注意,預先建立時間段列表(例如以15分鍾為增量)更有意義,那么如果有人要說出9:00 AM-9:45 AM,您只需要循環在列表中找到這些對象(也可以使用lambda來完成)以找到三個TimePeriods並將其IsBusy更新為True。 如果每個開始時間和結束時間都是不同的時間增量,則會遇到測試列表中每個項目的問題,以查看是否與計划的事件發生沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.