我有一个有序的DateTime
值集合。我想检索特定开始时间和结束时间之间集合中的所有值。我应该使用什么集合以最有效的方式以及如何做到这一点?
问问题
2061 次
2 回答
2
您可以使用 aList<T>
但保持有序。使用BinarySearch方法在列表中找到您的起点DateTime
。请注意,它返回:
排序列表中项目的从零开始的索引(如果找到项目);否则,负数是下一个大于 item 的元素的索引的按位补码,或者如果没有更大的元素,则为 Count 的按位补码。
因此,如果该值为负数,您将需要应用按位补码(~
运算符)来查找范围内的第一个索引。然后,您可以使用相同的过程并减去 1 来查找范围内的最后一个元素。
于 2013-03-07T11:19:21.907 回答
0
使用 LINQ(因为这是您的标签之一),您可以这样做:
IEnumerable<DateTime> orderedDateTimes; // Your ordered DateTime collection
DateTime start; // The start date/time, inclusive
DateTime end; // The end date/time, inclusive
var range = orderedDateTimes
.SkipWhile(dt => dt < start)
.TakeWhile(dt => dt <= end);
这将需要O(n)最坏的情况来获得一个范围。但是,您可以强制将结果放入列表或数组中,以便能够有效地重用它:
DateTime[] rangeArray = range.ToArray();
// -or-
List<DateTime> rangeList = range.ToList();
于 2013-03-07T11:27:25.757 回答