假设您有未排序 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的最快选项。
答案 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)
访问时间)。