Я ищу структуру, которая содержит отсортированный набор двойных значений. Я хочу запросить этот набор, чтобы найти ближайшее значение к указанному контрольному значению.
Я посмотрел на SortedList<double, double>
, и он вполне мне подходит. Однако, поскольку мне не нужны явные пары ключ / значение. мне кажется, это излишне, и мне интересно, смогу ли я сделать быстрее.
Условия:
- Структура инициализируется только один раз и никогда не изменяется (без вставки / удаления)
- Количество значений находится в диапазоне 100 тыс.
- Структура часто запрашивается с новыми ссылками, которые должны выполнить fast .
- Для простоты и скорости может быть возвращено значение набора чуть ниже эталона, а не ближайшее значение
- Я хочу использовать LINQ для запроса, если возможно, для простоты кода.
- Я хочу использовать сторонний код, если это возможно. Доступен .NET 3.5.
- Скорость важнее, чем объем памяти
В настоящее время я использую следующий код, где SortedValues
является вышеупомянутым SortedList
IEnumerable<double> nearest = from item in SortedValues.Keys
where item <= suggestion
select item;
return nearest.ElementAt(nearest.Count() - 1);
Могу ли я сделать быстрее?
Также я не уверен на 100%, действительно ли этот код безопасен. IEnumerable
, тип возврата моего запроса по определению больше не сортируется. Тем не менее, модульное тестирование с большой базой данных испытаний показало, что это на практике, так что это работает для меня. Есть ли у вас намеки относительно этого аспекта?
P.S. Я знаю, что есть много похожих вопросов, но ни один из них не отвечает моим конкретным потребностям. Особенно существует такая структура данных C #, как словарь, но без значения , но спрашивающий просто хочет проверить существование и ничего не найти.