从排序查询返回 int 集合中获得第一个免费地点的最有效方法是什么?
例如:{1,2,3,4,6} |结果:5
目前我正在使用foreach和counter来比较排序的quety.ToList()中的当前值 这需要大约600毫秒的10万条记录。
答案 0 :(得分:1)
除非你多线程,否则一次读一个是你最快的解决方案,因为这是一个O(n)问题。
答案 1 :(得分:1)
我不确定你会如何在LINQ中编写它,但我认为二进制搜索可以更快这种方式 - 从中间开始,将索引与值进行比较 - 如果它们相等,则继续在右半部分,否则在左半边等。
即使您从索引 start_index 开始,也不是1,您只需将该值与索引增加 start_index 进行比较。
答案 2 :(得分:1)
为什么使用ToList()?把它变成一个列表会使整个IEnumerable的想法变得绝对,你可能会失去一些性能。为什么不在IQueryable上使用foreach迭代并找到第一个缺少的memeber?