Структура данных для перечисления в c #, где поиск часто основывается на одном свойстве хранимых объектов

StackOverflow https://stackoverflow.com/questions/891848

Вопрос

Мне интересно, какую структуру данных люди рекомендовали бы для выполнения следующего.У меня есть класс, который имеет три основных свойства, например.

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 возможно, я смогу помочь вам здесь.Он предоставляет коллекцию в памяти, но позволяет вам приписывать свойства вашим объектам как индексируемые, чтобы он мог создавать эффективные запросы к ним.

или гибридный словарь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top