c#代码效率

时间:2009-02-25 10:00:54

标签: c#

我必须计算给定时间段之间的工作日数,这很简单,但考虑到公众假期会增加复杂性。

我的解决方案不是我称之为优雅也不高效,因为它检索公共假期并将它们放入列表中,检查列表中的日期是否与给定时间段内的日期匹配,以通过递增日期来检查从开始日期开始。

虽然这样可行但我宁愿有更高效的算法有没有人得到任何提示或推荐不同的数据结构来举行公众假期?

3 个答案:

答案 0 :(得分:10)

如果您按顺序存储了公共假期,则可以在列表中进行二元搜索,以查找列表中您的时间段开始时间的位置,另一个查找列表中的结尾位置时间的流逝。然后你只需要采取“正常”差异(删除周末)并减去二进制搜索结果之间的项目数。

小心公共假期开始或结束的时间段!

List<T>.BinarySearch方法应该没问题,假设您正在使用DateTime或其他一些自然可比的时间结构。请注意,如果您要搜索的键实际上不在列表中,则返回值为负数(这不是大部分时间)。请参阅文档中的备注。)

答案 1 :(得分:1)

如果您计算两个日期之间的工作日数,那么

TimeSpan t1 = Date1 - Date2;
int totalDays = t1.TotalDays;

然后使用您的两个日期,计算列表中公共假期的数量,这些公共假期在总日期之间减去。

我认为这样可行,除非在那里有一些公共假期,这需要多天,然后你必须调整你的选择逻辑。你可以粘贴到目前为止所做的事情,以判断你在哪里,以及你正在使用的方法。 : - )

谢谢,

安德鲁

答案 2 :(得分:0)

以下是如何以最高效率计算工作日:

http://alecpojidaev.wordpress.com/2009/10/29/work-days-calculation-with-c/