Одно слово предупреждения. OrderedDictionary
имеет действительно плохие характеристики производительности для большинства операций, кроме вставки и поиска: для удаления и изменения значения может потребоваться линейный поиск по всему списку, что приводит к времени выполнения O ( N ). (Для модификации это зависит от того, был ли доступ по индексу или по ключу.)
Для большинства операций с разумным количеством данных это абсолютно недопустимо. Кроме того, структура данных хранит элементы как в линейном векторе, так и в хэш-таблице, что приводит к некоторой перегрузке памяти.
Если поиск по индексу происходит не слишком часто, SortedList
или SortedDictionary
будут иметь гораздо лучшие характеристики производительности (доступ по индексу может быть достигнут с помощью ElementAt
метод расширения).
Если, с другой стороны, доступ по индексу является нормой, тогда полностью прекратите использование структур данных словаря и просто сохраните свои значения в List<KeyValuePair<TKey, TValue>>
. Хотя это означает линейный поиск доступа по ключу, все остальные операции очень дешевы, и на практике трудно добиться общей производительности.
/ РЕДАКТИРОВАТЬ: Конечно, последний также является структурой данных словаря в теоретическом смысле. Вы даже можете инкапсулировать его в класс, реализующий соответствующий интерфейс.