1

我有一个有序的DateTime值集合。我想检索特定开始时间和结束时间之间集合中的所有值。我应该使用什么集合以最有效的方式以及如何做到这一点?

4

2 回答 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 回答