簡體   English   中英

我需要一個遞歸函數從其他時間段中刪除時間段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM