0

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

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

4

2 回答 2

2

这取决于您的使用情况。

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

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

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

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

如果您只需要这样做一次,请保持您的代码不变(O(n) 查找)。

于 2013-01-11T11:09:43.860 回答
0
theList.First(x => x.certainField.Equals(whatImLookingFor)); //already optimized 

顺便说一句,您真的不知道 .NET Dictionary[index] 运算符是如何在内部实现的(例如,循环遍历数组或在低级使用指针链表)

我建议阅读使用 C# 对数据结构进行广泛检查,深入分析 .NET 数据结构效率(数组、堆栈、字典、列表),尽管几年前它仍然有效且值得一看

于 2013-01-11T11:32:52.893 回答