Структура данных для перечисления в c #, где поиск часто основывается на одном свойстве хранимых объектов
-
23-08-2019 - |
Вопрос
Мне интересно, какую структуру данных люди рекомендовали бы для выполнения следующего.У меня есть класс, который имеет три основных свойства, например.
public class Example {
public Object One { get; }
public Object Two { get; }
public Object Three { get; }
}
Другой класс содержит коллекцию этих объектов, и ему часто требуется перечислять их, что я делаю в основном с помощью LINQ.Однако большую часть времени мне нужно искать / перечислять только подмножество этих объектов, основываясь в основном на значении свойства One, поэтому то, что я хотел бы сделать, это сохранить их в эффективной структуре данных, основанной на этом свойстве.Я мог бы сделать что-то вроде следующего:
Dictionary<Object,List<Example>>
Но это кажется мне очень неэффективным, я знаю, что мне нужна какая-то хэш-таблица, но, никогда раньше не используя ее в C #, я не уверен, что там можно использовать.
Некоторые другие требования / примечания:
- Все объекты неизменяемы и имеют фиксированные хэш-коды, которые вычисляются на основе значений, с которыми создается экземпляр класса в конструкторах
- Должна быть возможность хранить несколько элементов, которые имеют одинаковое значение (и, следовательно, хэш-код) для свойства One в одном и том же "слоте" в структуре данных
- Должен иметь возможность свободно добавлять и удалять объекты из коллекции
Решение
Коллекции PowerCollections (http://www.codeplex.com/PowerCollections) имеет контейнер MultiDictionary - возможно, вы могли бы попробовать это?
Другие советы
Индексированный LINQ возможно, я смогу помочь вам здесь.Он предоставляет коллекцию в памяти, но позволяет вам приписывать свойства вашим объектам как индексируемые, чтобы он мог создавать эффективные запросы к ним.
или гибридный словарь