我有一个以ID作为键的项目字典。这些项目也具有时间跨度值。一个功能需要对时间跨度> gt的项目做一些事情。 searchTime。
排序列表的速度会更快,还是排序需要与foreach函数一样长。我希望有一个排序字典允许您对不同的键进行排序。
哪个更快?
<??
或
List<StatePath> timeSorted = new List<StatePath>();
timeSorted = itemDict.ToList();
timeSorted.Sort((ts1, ts2) => TimeSpan.Compare(ts1.time, ts2.time));
int i = timeSorted.Count -1;
while((i > 0) && timeSorted[i].time >= searchTime)
{
//do something
}
答案 0 :(得分:1)
在比较两个选项时,几乎总是可以改变结果的上下文。如果您不是测量两者,那么您应该是。这假设它甚至很重要;赔率是,这里的差异是不推动你的应用程序的性能。
那就是说,我可能会这样做:
foreach(var curItem in itemDict.Values.Where(i => i.time >= searchTime))
{
//do something
}
具体来说,我想知道你打电话给timeSorted.Sort()
时的想法。该方法显然必须运行它自己的foreach
循环或类似方法才能完成操作。
答案 1 :(得分:0)
理论上,foreach循环应该更快。排序的最佳速度是O(n log n),而for循环是O(n)。
在实践中,当然,你应该测试哪一个更快。