Существует ли лучшая структура данных, чем Словарь, если значения являются объектами, и свойство тех объектов ключи?

У меня есть a Dictionary<int, object> где int свойство obj. Существует ли лучшая структура данных для этого? Я испытываю желание использовать свойство, поскольку ключ избыточен.

Это Dictionary<int, obj> поле в контейнерном классе, который допускает случайную индексацию в obj значения на основе int идентификационный номер. Упрощенный (никакая обработка исключений) индексатор в контейнерном классе был бы похож:

obj this[int id]
{
     get{ return this.myDictionary[id];}
}

где myDictionary вышеупомянутое Dictionary<int, obj> содержание объектов.

Это может быть типичным способом быстрого произвольного доступа, но я хотел получить вторые мнения.

7
задан Brian Triplett 28 January 2010 в 12:31
поделиться

3 ответа

Там нет конкретного класса в рамках, который это делает. Есть абстрактный, хотя, keyedcollection. Вам придется вывести свой собственный класс из этого и реализовать метод GetKeyForitem (). Это довольно просто, просто верните значение свойства, с помощью которого вы хотите индексировать.

Это все, что вам нужно сделать, но следить за MedhniteMkey (). Вы должны сделать что-то значимое, когда свойство, которое вы используете в качестве ключевых изменений значения. Достаточно легко, если вы гарантируете, что свойство неизменяется (имеет только добитель). Но совсем неловко, когда вы этого не сделаете, сам объект должен иметь осознание того, что он хранится в вашей коллекции. Если вы ничего не делаете об этом (вызывая ChangeIteMkey), объект теряется в коллекции, вы не можете найти его обратно. Довольно близко к утечке.

Обратите внимание, как словарь <> боковые шаги этой задачей, указав значение ключа и объекта отдельно. Вы все равно не сможете найти объект назад, но, по крайней мере, он не теряется по дизайну.

9
ответ дан 6 December 2019 в 10:00
поделиться

Существует класс KeyedCollection.

EDIT: KeyedCollection может использовать словарь внутри, но интерфейс для этого конкретного сценария более чистый, чем сырой словарь, так как вы можете искать по значениям напрямую. Правда, в целом я не нахожу его очень полезным.

9
ответ дан 6 December 2019 в 10:00
поделиться

C # Динамические свойства Пост, похоже, показывает, что использование словаря было популярным выбором. Другие посты предлагают использовать словарь Hashtable

Hashtable

0
ответ дан 6 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: