针对List <t> </t>的快速LINQ查询

时间:2011-09-01 18:54:00

标签: c# .net linq list

假设您有未排序 List<MyClass>

public class MyClass
{ 
   public Guid Id { get; set; }
   public string Name { get; set; }
}

我想用LINQ搜索一个项目。使用这个简单的子句:where my.Id == id。您是否建议更快地获取查询? IComparable的?

编辑:我的意思是我使用普通的linq还是有更快的选择?例如编写自定义IComparable和binarysearch?

谢谢!

更新:我知道词典是具有唯一ID的最快选项。

2 个答案:

答案 0 :(得分:12)

您可以使用LINQ的FirstOrDefault:

 MyClass firstMatch = theList.FirstOrDefault(my => my.Id == id);

如果没有对列表进行排序,这可能是最好的选择,即使它仍然是O(N)。

答案 1 :(得分:2)

正如您所说,您的列表未排序,您无法做出比O(n)搜索更好的操作,例如使用First()FirstOrDefault(),如@Reed Copsey answer所示。

实际上二进制搜索仅适用于已排序的数据,而在其他情况下则无用。

无论如何,如果您需要多次访问该列表以使用Id查找对象,请确保通过对列表进行排序并使用二进制搜索(即获取O(log(n))访问时间来更快),或将列表复制到Dictionary<>(即获得~O(1)访问时间)。

相关问题