У меня есть отсортированный массив размером около 500 000 int. В настоящее время я выбираю правильный индекс, беря различия между моим целевым int и всеми элементами, а затем сортирую по минимальной разнице с помощью LINQ (очень неэффективно).
Я хотел бы иметь возможность сделать что-нибудь очень аналогично BinarySearch.
Дано:
Pos Value
0 10
1 20
2 30
4 50
5 60
Если я хочу найти ближайшее значение для значения 24, я бы хотел, чтобы возвращаемый индекс был равен 1.
Дано:
int index = myArray.BinarySearch(values, 24);
if (index < 0)
index = ~index;
Это возвращает 2, поскольку дает следующий элемент в строке вместо самого близкого. Можно ли написать IComparer, который возвращал бы ближайший индекс?
Приведенные значения:
Value ExpectedReturn
20 1
24 1
25 2
26 2
30 2
Я пытаюсь сделать это как можно быстрее. Все, что я сделал до сих пор в LINQ, не соответствовало тому, что, по моему мнению, может быть достигнуто с помощью хорошо выполненного двоичного поиска. Спасибо за ваш вклад.