我必須計算一段足夠簡單的給定時間段內的工作日數量,但考慮到公共假期會增加複雜度。c#code efficency
我的解決方案不是我稱之爲優雅也不高效的,因爲它檢索公共假日並將它們放入列表中,檢查列表中的日期是否與給定時間段內的日期匹配,以便通過增加從開始日期開始的日期。
雖然這工作正常,我寧願有一個更有效的算法有人得到任何提示或推薦不同的數據結構來舉辦公衆假期?
我必須計算一段足夠簡單的給定時間段內的工作日數量,但考慮到公共假期會增加複雜度。c#code efficency
我的解決方案不是我稱之爲優雅也不高效的,因爲它檢索公共假日並將它們放入列表中,檢查列表中的日期是否與給定時間段內的日期匹配,以便通過增加從開始日期開始的日期。
雖然這工作正常,我寧願有一個更有效的算法有人得到任何提示或推薦不同的數據結構來舉辦公衆假期?
如果您已按照順序存儲公共假期,則可以在列表中執行二進制搜索以查找列表中您的時間段開始時間下降的位置,以及另一個查找列表中的位置期限結束。然後,您只需採取「正常」區別(刪除週末),並減去二進制搜索結果之間的項目數。
請注意公衆假期開始或結束的時間段!
(List<T>.BinarySearch
方法應該適用於您,假設您使用DateTime或其他自然可比的時間結構。請注意,如果您要搜索的鍵實際上不在列表中,則返回值爲負值不會是大部分的時間)。看到文檔的言論。)
如果計算工作日所以
TimeSpan t1 = Date1 - Date2;
int totalDays = t1.TotalDays;
然後使用兩個日期兩個日期之間的數,算您的名單中公共假期的數量落在總天數之間並從中減去。
我會認爲這會工作,除非有一些公共假期在那裏跨越多天,然後你將不得不調整你的選擇邏輯。你可以粘貼你迄今爲止做的事情,以便判斷你在哪裏,確切地說你使用的是什麼方法。 :-)
感謝,
安德魯