如何最有效地搜索对象列表?

时间:2013-01-04 11:49:48

标签: c# performance list for-loop

我有List<T> objects ,其中包含几个字段。 如何最有效地搜索此列表以查找某个 object ? 现在我只为loop制作一个如下所示:

for(int i = 0; i < theList.Count; i++)
{
  if (theList[i].certainField == whatImLookingFor)
  {
    doSomething();
    break;//to exit for loop to prevent unnecessary processing
  }
}

我可以采用更有效的方式解决这个问题吗?它通常是我正在比较的相同领域。我想也许可以使用字典,但我不确定是否应该。

2 个答案:

答案 0 :(得分:2)

这取决于您的使用情况。

如果您需要多次执行并希望尽快执行,请创建一个字典:

//save a dictionary somewhere
var dictionary = theList.ToDictionary(i => i.certainField);

//execution:
var item = dictionary[whatImLookingFor];
dosomething();

这是以创建字典为代价的(更长的初始化时间),但提供更快的查找O(1)。

如果您只需要执行此操作,请保持代码不变(O(n)查找)。

答案 1 :(得分:0)

theList.First(x => x.certainField.Equals(whatImLookingFor)); //already optimized 

BTW你真的不知道.NET Dictionary [index]运算符是如何内部实现的(例如循环数组或使用低级别的指针链表)

我建议阅读Extensive Examination of Data Structures Using C#对.NET数据结构效率(数组,堆栈,字典,列表)的深入分析,尽管多年前它仍然有效且值得关注