A List<KeyValuePair<TKey, TValue>>
(созданный с соответствующей емкостью), вероятно, будет работать так же хорошо в этом случае ... но это не будет ужасно идиоматическим. (Просто чтобы прояснить ситуацию, вы просто позвоните Equals
для каждого ключевого элемента, полностью игнорируя хеш-код.) Если List<T>
кажется вам немного тяжелым, вы можете даже перейти на KeyValuePair<TKey, TValue>[]
, если хотите. Круто, но эй ... это твой код.
Вы действительно пытались Dictionary<TKey, TValue>
и обнаружили, что это слишком медленно? «Похоже на излишество» - не такой хороший аргумент, как «Я попробовал его, профилировал и обнаружил, что недопустимое количество времени моего приложения тратится на создание словарей и поиск записей в них. имеют характеристику производительности X, и на данный момент у меня есть только Y ".
Если ваш тип ключа имеет определенный порядок (и если вы собирались выполнить больше операций поиска в структуре данных, чем собирались создавать экземпляры), вы могли бы отсортировать список, что означает, что у вас будет максимум 3 сравнения для любого конкретный поиск. Всего с 5 записями вы можете даже жестко закодировать все потенциальные пути, если вы хотите оптимизировать до самого конца. (Вы можете даже иметь разные реализации для 2, 3, 4 и 5 элементов. Хотя в этот момент это становится немного глупо.) Это в основном реализация SortedList<TKey, TValue>
, но вы можете быть в состоянии оптимизировать это немного для вашего сценария только с несколькими записями. Опять же, стоит сначала попробовать встроенные типы.
Важно, чтобы вы знали, насколько важна эта часть вашего кода для вашей общей производительности - и когда она станет «достаточно хорошей», чтобы вы могли остановиться соответствующим образом.