我有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
}
}
我可以采用更有效的方式解决这个问题吗?它通常是我正在比较的相同领域。我想也许可以使用字典,但我不确定是否应该。
答案 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数据结构效率(数组,堆栈,字典,列表)的深入分析,尽管多年前它仍然有效且值得关注