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

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

public class Example {

  public Object One { get; }
  public Object Two { get; }
  public Object Three { get; }
}

Другой класс содержит коллекцию этих объектов и часто должен перечислять их, что я делаю в основном с LINQ. Хотя в большинстве случаев мне нужно искать / перечислять только подмножество этих объектов, основываясь в основном на значении свойства One, поэтому я хотел бы сохранить их в эффективной структуре данных, основанной на этом свойстве. Я мог бы сделать что-то вроде следующего:

Dictionary<Object,List<Example>>

Но мне кажется, что я очень неэффективен, я знаю, что мне нужен какой-то хэш-стол, но я никогда не использовал его раньше в C #, и я не уверен, что можно использовать.

Некоторые другие требования / примечания:

  • Все объекты являются неизменяемыми и имеют фиксированные хеш-коды, которые вычисляются из значений, с которыми создается экземпляр класса в конструкторах
  • Должен иметь возможность хранить несколько элементов с одинаковым значением (и, следовательно, хэш-кодом) для свойства One в одном и том же «слоте» в структуре данных
  • Должен иметь возможность свободно добавлять и удалять объекты из коллекции

Ответы [ 3 ]

2 голосов
/ 21 мая 2009

Индексированный LINQ может помочь вам здесь. Он предоставляет коллекцию в памяти, но позволяет вам приписывать свойства ваших объектов индексируемым, чтобы он мог создавать эффективные запросы к ним.

1 голос
/ 12 августа 2009

PowerCollections (http://www.codeplex.com/PowerCollections) имеет контейнер MultiDictionary - возможно, вы могли бы попробовать это?

0 голосов
/ 21 мая 2009

или HybridDictionary

...