Как использовать BinarySearch for List

Начнем с этой перегрузки List BinarySearch:

public int BinarySearch(T item, IComparer<T> comparer);

Хорошо известно, что список должен быть отсортирован с помощью подходящего IComparer перед использованием BinarySearch. Но тогда: для поиска в списке вам нужно будет указать элемент T. Это довольно неожиданно, когда кто-то используется для поиска элементов в списке на основе свойств этих элементов (т.е. с использованием Linq или делегатов / предикатов). Потому что, когда у меня уже есть элемент T, мне не нужно его искать!

Теперь я реализовал код C ++ на C # и увидел, что программист на C ++ использовал двоичный поиск в стиле C ++ повсюду в своем коде следующим образом. Сначала он сделал новый элемент T и дал ему свойства, которые он искал. Затем он просмотрел список, чтобы найти индекс элемента в списке с такими же свойствами . Компаратор C ++, конечно, был адаптирован к этим свойствам.

Так что это совершенно другой способ поиска элементов в списке. BinarySearch создает фиктивный T-элемент и ищет индекс, с помощью которого он может получить реальный T-элемент в списке. С точки зрения Linq это кажется неестественным.

Мои вопросы:

Правильно ли я описал идею BinarySearch?

Как вы думаете, можно ли использовать поиск в стиле Linq с BinarySearch без сначала сделать фиктивный элемент T?

10
задан Gerard 8 February 2011 в 08:56
поделиться