Нужен отсортированный словарь, предназначенный для поиска значений с ключами, меньшими или большими, чем искомое значение - PullRequest
4 голосов
/ 23 апреля 2010

Мне нужны объекты , отсортированные по цене (десятичное) значение для быстрого доступа.Я должен быть в состоянии найти все объекты с ценой больше, чем или меньше, чем B .Я размышлял о SortedList , но он не предоставляет способ найти восходящий или нисходящий перечислитель, начиная с заданного значения ключа (скажем, дать мне все объекты с ценой менее 120 долларов).

Подумайтесистемы, которая принимает автомобили для продажи от продавцов и сохраняет их в этой коллекции.Затем покупатели хотят найти автомобили дешевле, чем 1000 долларов.

В основном мне нужны древовидная коллекция и функциональность для поиска узла, который меньше \ больше \ равен предоставленному ключу.

Пожалуйста, советуйте.

Ответы [ 3 ]

6 голосов
/ 23 апреля 2010

Вы можете использовать BinarySearch для SortedList для поиска первого и последнего индексов, удовлетворяющих вашим условиям, а затем просто получить диапазон элементов из списка.

4 голосов
/ 23 апреля 2010

Ответ зависит от ваших моделей использования. Если это одноразовое упражнение по использованию несортированного набора входных данных и поиску подходящих объектов, вам гораздо лучше использовать LINQ:

list.Where(e => A < e.Price || e.Price < B);

Если список статичен, и вы хотите запросить несколько диапазонов, поместите объекты в массив, отсортируйте их по цене, а затем используйте двоичный код, чтобы найти интересующие диапазоны.

2 голосов
/ 23 апреля 2010

Пожалуйста, подумайте о SortedList. В качестве альтернативы вы можете использовать любую коллекцию и запросить ее с помощью LINQ. Например, простой общий список:

        List<Int32> tempList = new List<Int32>();

        tempList.Where(singleItem => singleItem > 100)
            .ToList<Int32>();
...