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

本文关键字:对象 列表 搜索 有效地 何最 | 更新日期: 2023-09-27 17:50:45

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

有没有更有效的方法来做这件事?这通常是我比较的同一个领域。我想也许应该用字典,但我不太确定是否应该。

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

这取决于您的使用。

如果您需要多次执行此操作并希望执行速度尽可能快,请创建一个字典:

//save a dictionary somewhere
var dictionary = theList.ToDictionary(i => i.certainField);
//execution:
var item = dictionary[whatImLookingFor];
dosomething();

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

如果你只需要这样做一次,那么保持你的代码是(O(n)查找)

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

顺便说一句,你真的不知道。net Dictionary[index]操作符是如何在内部实现的。循环遍历数组或使用指针(低级链表)

我推荐阅读《使用c#进行数据结构的广泛检查》,它深入分析了。net数据结构的效率(数组、堆栈、字典、列表),尽管它写于多年前,但仍然有效,值得一看