IQueryable第一个免费名额
从返回 int 集合的排序查询中获取 first 空闲位置的最有效方法是什么?
例如:{1,2,3,4,6} |结果:5
目前我正在使用 foreach 和 counter 来比较已排序 quety.ToList() 中的当前值 100 000 条记录大约需要 600 毫秒。
What's the most efficient way to get a first free spot from sorted query returning int collection ?
eg.: {1,2,3,4,6} | result.: 5
At the moment I am using foreach and counter that compares current value from sorted quety.ToList()
which takes about 600ms on 100 000 records.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
除非您使用多线程,否则一次读取一个是最快的解决方案,因为这是一个 O(n) 问题。
Unless you multithread it, reading one at a time is your fastest solution since this is an O(n) problem.
我不确定你会如何在 LINQ 中编写它,但我想这样二分搜索可能会更快 - 从中间开始,将索引与值进行比较 - 如果它们相等,则在右半部分继续,否则在左半等。
即使您从不为 1 的索引 start_index 开始,您也可以简单地将该值与增加了 start_index 的索引进行比较。
I am not sure how you would write it in LINQ, but I suppose a binary search could be faster in this way - starting from the middle, comparing the index with value - if they are equal, continue in the right half, otherwise in the left half etc.
Even if you're starting from an index start_index which is not 1, you can simply compare the value with index increased by start_index.
为什么使用ToList()?将其转换为列表会使整个 IEnumerable 想法变得绝对,并且您可能会在那里失去一些性能。为什么不使用 foreach 遍历 IQueryable 并找到第一个缺失的成员?
Why do you use ToList()? Turning it to a list renders the whole IEnumerable idea absolute and you might lose some performance there. Why not iterate with foreach over the IQueryable and find the first missing memeber?