我有一个机器工作过的日期列表,但它不包括机器停机的日期。我需要创建工作日和非工作日列表。我不确定执行此操作的最佳方法。我首先递增一个范围内的所有日期,并通过每次遍历整个列表来检查日期是否在列表中。我正在寻找一种更有效的查找日期的方法。
class machineday
{
datetime WorkingDay;
}
class machinedaycollection : List<machineday>
{
public List<TimeCatEvent> GetAllByCat(string cat)
{
_CategoryCode = cat;
List<machineday> li = this.FindAll(delegate(machinedaydummy) { return true; });
li.Sort(sortDate);
return li;
}
int sortDate(machinedayevent1, machinedayevent2)
{
int returnValue = -1;
if (event2.date < event1.date)
{
returnValue = 0;
}
else if (event2.date == event1.date)
{
//descending
returnValue = event1.date.CompareTo(event2.date);
}
return returnValue;
}
}
最佳答案
对日期进行排序并在递增计数器的同时迭代结果列表。每当计数器与当前列表元素不匹配时,您就会发现列表中缺少一个日期。
List<DateTime> days = ...;
days.Sort();
DateTime dt = days[0].Date;
for (int i = 0; i < days.Length; dt = dt.AddDays(1))
{
if (dt == days[i].Date)
{
Console.WriteLine("Worked: {0}", dt);
i++;
}
else
{
Console.WriteLine("Not Worked: {0}", dt);
}
}
(假设列表中没有重复的日期。)
关于c# - 检查 List<T> 日期的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2613577/