Почему в .Net отсутствует структура данных Set? - PullRequest
5 голосов
/ 16 сентября 2009

Одна из моих самых больших проблем, связанных с переходом с Java на .Net, заключается в том, что в .Net нет интерфейса Set. Я знаю, что есть библиотеки, которые я могу скачать и скачать, но в чем причина того, что они не встроены? Есть Карты (Словарь) и Списки, но почему не Набор?

Редактировать : Я должен уточнить, что не все еще используют .Net 3.5 - поэтому я более или менее имею в виду более старые версии .Net

Ответы [ 9 ]

8 голосов
/ 16 сентября 2009

Я думаю, что это просто упущение авторов BCL. .NET 3.5 имеет класс HashSet ; для более ранних версий я рекомендую заключить словарь , с нулями в поле значения, чтобы реплицировать O (1) время добавления, удаления и поиска.

5 голосов
/ 16 сентября 2009

В .NET 4.0 HashSet будут модифицированы, чтобы даже реализовать новый интерфейс ISet.

4 голосов
/ 16 сентября 2009

.NET 3.5 имеет HashSet , который выполняет все операции установки.

3 голосов
/ 16 сентября 2009

Как уже отмечали другие, существует HashSet<T>, который на самом деле является просто набором.

Причина, по которой перед ним стоит "хеш" (подробности реализации набора, поскольку он использует хеши для устранения дубликатов), заключается в том, что Set является ключевым словом в VB.NET.

3 голосов
/ 16 сентября 2009

В наши дни HashSet<T>, но, к сожалению, нет интерфейса, о котором я знаю.

3 голосов
/ 16 сентября 2009

Вы имеете в виду HashSet ?

2 голосов
/ 16 сентября 2009

Я также недавно перешел с Java на .Net (из-за профессиональной занятости) и должен признать, что мои первоначальные проблемы были также в коллекциях.
В текущей версии .Net (3.5 и о C #) вы должны ориентироваться на

  • ICollection
  • IList<T>
  • List<T>
  • IDictionary<TKey,TValue>
  • IEnumerable<T>

Это наиболее часто используемые (надеюсь, я не пропустил один)

2 голосов
/ 16 сентября 2009

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

Как уже упоминалось, FCL имеет HashSet<T>.

1 голос
/ 16 сентября 2009

Может быть из-за образовательных соображений.

Типичный программист видит наборы как магический контейнер, который просто работает независимо от того, сколько в нем элементов.

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

Просто дикое предположение.

...