IQueryable <T>первое свободное место - PullRequest
1 голос
/ 17 января 2010

Какой самый эффективный способ получить первое свободное место из отсортированного запроса, возвращающего int коллекцию?

Например: {1,2,3,4,6} | результат .: 5

В настоящее время я использую foreach и counter, которые сравнивают текущее значение из отсортированного quety.ToList () который занимает около 600 мс на 100 000 записей.

Ответы [ 3 ]

1 голос
/ 17 января 2010

Я не уверен, как бы вы написали это в LINQ, но я полагаю, что бинарный поиск может быть быстрее таким образом - начиная с середины, сравнивая индекс со значением - если они равны, продолжайте в правой половине, в противном случае в левой половине и т. д.

Даже если вы начинаете с индекса start_index , который не равен 1, вы можете просто сравнить значение с индексом, увеличенным на start_index .

1 голос
/ 17 января 2010

Почему вы используете ToList ()? Превращение его в список делает всю идею IEnumerable абсолютной, и вы можете потерять некоторую производительность там. Почему бы не выполнить итерацию с foreach над IQueryable и не найти первый отсутствующий член?

1 голос
/ 17 января 2010

Если вы не используете многопоточность, чтение по одному - ваше самое быстрое решение, поскольку это проблема O (n).

...