Вы можете создать индекс для начальных значений для индексации в обр.
var arr = { [0,3], [5,10], [15,59] };
var dictStart = new Dictionary<int, int>();
dictStart.Add(0, 0);
dictStart.Add(5, 1);
dictStart.Add(15, 2);
Теперь, чтобы получить диапазон, вы можете выполнить двоичный поиск по значениям dictStart dict для первого элемента, который являетсявыше, чем значение для поиска.Затем возьмите предыдущую запись.
Трудно объяснить.В качестве примера посмотрите вверх 9. Выполните поиск того, что получило элемент e = [5, 1].
var range = arr[e[1]]; // = [5, 10]
bool isWithin = val <= range[1] && val >= range[0];
Таким образом, он будет менее инвазивным для памяти.Ключ заключается в быстром поиске начальных значений диапазонов.
Я думаю, это решит проблему, но это не хеш.