Какой лучший способ переиндексировать TDictionary? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть TObjectDictionary<Integer, TMyObject>, а TMyObject имеет поле ID, которое является ключом.Словарь владеет значениями.Ключи изначально исходят из генератора последовательностей, поэтому при удалении и вставке значения ключей становятся непоследовательными в словаре, и мне нужно, чтобы они были последовательными.Я мог бы вытащить все объекты в отдельный TList, перенумеровать их ID s, очистить словарь и заново добавить объекты с их теперь последовательными ключами, но это кажется ужасно не элегантным.Есть лучший способ сделать это?

Кроме того, как мне сообщить TObjectDictionary, что он больше не владеет своими значениями?

1 Ответ

0 голосов
/ 27 сентября 2019

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

Поскольку ключ / идентификатор исходит отВ генераторе последовательности порядок вставки, вероятно, находится в возрастающем порядке, что может служить индикатором для помещения элементов в список и их упорядочения по идентификатору.Затем можно выполнить поиск с помощью бинарного поиска.

Если вы не любите фантазировать и внедрите свое собственное дерево поиска, чтобы удовлетворить любые ваши требования.

...