intコレクションを返すソートされたクエリから最初の空きスポットを取得する最も効率的な方法は何ですか?
例: {1,2,3,4,6} | 結果:5
現時点では、ソートされた quety.ToList() から現在の値を比較する foreach とカウンターを使用しています。これには、100 000 レコードで約 600 ミリ秒かかります。
intコレクションを返すソートされたクエリから最初の空きスポットを取得する最も効率的な方法は何ですか?
例: {1,2,3,4,6} | 結果:5
現時点では、ソートされた quety.ToList() から現在の値を比較する foreach とカウンターを使用しています。これには、100 000 レコードで約 600 ミリ秒かかります。
マルチスレッド化しない限り、これは O(n) 問題であるため、一度に 1 つずつ読み取ることが最速の解決策です。
LINQ でどのように記述するかはわかりませんが、この方法で二分探索が高速になる可能性があると思います-中間から開始して、インデックスと値を比較します-それらが等しい場合は右半分に進み、そうでない場合は左半分など
1 ではないインデックスstart_indexから開始している場合でも、値をstart_indexだけ増やしたインデックスと単純に比較できます。
なぜ ToList() を使うのですか? それをリストにすると、IEnumerable のアイデア全体が絶対的なものになり、パフォーマンスが低下する可能性があります。foreach で IQueryable を反復処理して、最初に欠落しているメンバーを見つけてみませんか?