针对列表< >的快速LINQ查询

本文关键字:LINQ 查询 列表 | 更新日期: 2023-09-27 18:07:20

假设你有一个大的未排序的 List<MyClass>

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

我想用LINQ搜索一个项目。用这个简单的子句:where my.Id == id。您有什么建议可以使查询更快吗?IComparable吗?

编辑:我的意思是我使用正常的linq还是有一个更快的选择?例如,编写一个自定义的可比性和二进制搜索?

谢谢!

更新:我知道字典是唯一ID的最快选择。

针对列表< >的快速LINQ查询

你可以直接使用LINQ的FirstOrDefault:

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

不排序列表,这可能是最好的选择,即使它仍然是O(N)。

正如您所说的,您的列表未排序,您不能做任何比O(n)搜索更好的事情,例如使用First()FirstOrDefault(),如@Reed Copsey回答所示。

事实上,二分查找只适用于排序数据,而在其他情况下是无用的。

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