如何最有效地搜索对象列表
本文关键字:对象 列表 搜索 有效地 何最 | 更新日期: 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数据结构的效率(数组、堆栈、字典、列表),尽管它写于多年前,但仍然有效,值得一看