【问题标题】:IQueryable<T> first free spotIQueryable<T> 第一个空闲位置
【发布时间】:2010-01-17 15:27:57
【问题描述】:

从返回 int 集合的排序查询中获得第一个空闲位置的最有效方法是什么?

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

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

【问题讨论】:

  • 您这样做不是为了生成 ID,是吗?如果您对场景进行更多解释,也许有人可以想到实现相同目标的替代方法。

标签: c# linq collections iqueryable


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    即使您从一个不是 1 的索引 start_index 开始,您也可以简单地将该值与增加 start_index 的索引进行比较。

    【讨论】:

    • 如果你有索引的话。
    • 您有索引 = 您可以在具体索引处访问集合?如果你不能这样做,那么你可能是对的,它是 O(n) ;)
    【解决方案3】:

    为什么要使用 ToList()?将其转换为列表会使整个 IEnumerable 想法变得绝对,并且您可能会在那里失去一些性能。为什么不使用 foreach 遍历 IQueryable 并找到第一个丢失的成员?

    【讨论】:

    • 试过了,时间是原来的两倍。
    • Err... ToList() 花费了更少的时间?
    猜你喜欢
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2018-12-26
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多