排序列表或foreach哪个会更快

时间:2016-04-19 17:08:52

标签: c# list foreach

我有一个以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
}

2 个答案:

答案 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)。

在实践中,当然,你应该测试哪一个更快。