IQueryable <t>第一个免费地点</t>

时间:2010-01-17 15:27:58

标签: c# linq collections iqueryable

从排序查询返回 int 集合中获得第一个免费地点的最有效方法是什么?

例如:{1,2,3,4,6} |结果:5

目前我正在使用foreach和counter来比较排序的quety.ToList()中的当前值 这需要大约600毫秒的10万条记录。

3 个答案:

答案 0 :(得分:1)

除非你多线程,否则一次读一个是你最快的解决方案,因为这是一个O(n)问题。

答案 1 :(得分:1)

我不确定你会如何在LINQ中编写它,但我认为二进制搜索可以更快这种方式 - 从中​​间开始,将索引与值进行比较 - 如果它们相等,则继续在右半部分,否则在左半边等。

即使您从索引 start_index 开始,也不是1,您只需将该值与索引增加 start_index 进行比较。

答案 2 :(得分:1)

为什么使用ToList()?把它变成一个列表会使整个IEnumerable的想法变得绝对,你可能会失去一些性能。为什么不在IQueryable上使用foreach迭代并找到第一个缺少的memeber?