针对列表< >的快速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的FirstOrDefault:
MyClass firstMatch = theList.FirstOrDefault(my => my.Id == id);
不排序列表,这可能是最好的选择,即使它仍然是O(N)。
正如您所说的,您的列表未排序,您不能做任何比O(n)
搜索更好的事情,例如使用First()
或FirstOrDefault()
,如@Reed Copsey回答所示。
事实上,二分查找只适用于排序数据,而在其他情况下是无用的。
无论如何,如果您需要访问该列表多次使用Id
查找对象,可以肯定的是,通过对列表进行排序并使用二进制搜索(即获得O(log(n))
访问时间),或者通过将列表复制到Dictionary<>
(即获得~O(1)
访问时间),您将更快。