Как выполнить бинарный поиск по IList <T>? - PullRequest
37 голосов
/ 09 июня 2009

Простой вопрос - с учетом IList<T> как выполнить бинарный поиск без написания метода самостоятельно и без копирования данных в тип со встроенной поддержкой бинарного поиска. Мой текущий статус следующий.

  • List<T>.BinarySearch() не является членом IList<T>
  • Для List<T>
  • IList<T> не наследуется от IList, поэтому использование ArrayList.Adapter() невозможно

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

Если это невозможно, кто может дать самую короткую, самую быструю, самую умную или самую красивую реализацию двоичного поиска для IList<T>?

UPDATE

Мы все знаем, что список должен быть отсортирован перед использованием бинарного поиска, поэтому вы можете предположить, что это так. Но я предполагаю (но не проверял), что та же проблема с сортировкой - как вы сортируете IList<T>?

ЗАКЛЮЧЕНИЕ

Кажется, что нет встроенного бинарного поиска для IList<T>. Для поиска и сортировки можно использовать методы First() и OrderBy() LINQ, но это также приведет к снижению производительности. Реализация его самостоятельно (как метод расширения) кажется лучшим, что вы можете сделать.

Ответы [ 11 ]

0 голосов
/ 09 июня 2009

Обратите внимание, что хотя List и IList не имеют метода BinarySearch, SortedList имеет.

...