Идеальная структура данных в памяти для удаления дубликатов от прибл.100 000 целых - PullRequest
0 голосов
/ 11 февраля 2012

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

  1. Какая идеальная структура данных в C #?

  2. Были бы B-деревья идеальными для моего случая, и если да, есть ли реализация B-дерева в C #?

(Я новичок в C #.)

Ответы [ 3 ]

4 голосов
/ 11 февраля 2012

Я бы просто использовал HashSet<T>. Он будет игнорировать дубликаты.

Обратите внимание, что перечисление HashSet<T> возвращает элементы в неопределенном порядке.


Если вам нужна сортировка, посмотрите на SortedDictionary<TKey, TValue>. Это основано на дереве, и, вероятно, будет медленнее.

0 голосов
/ 11 февраля 2012

Какая идеальная структура данных в C #?

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

При этом HashSet<int> будет хорошо работать для этой задачи:

По крайней мере, в .NET 4 это реализация интерфейса ISet<T>, который моделирует математические наборы .В отличие от мультимножеств (которые также называются сумки ), они содержат только отдельные элементы.Таким образом, если вы добавляете одно и то же значение дважды к одному и тому же HashSet<int>, оно будет содержаться только один раз.

HashSet<T> должно иметь хорошую производительность даже для больших наборов, поскольку оно реализовано в виде хэша-table (как следует из названия).

Тот факт, что наборы неупорядочены, не должен иметь значения, если вы собираетесь вставить значения в реляционную базу данных (где записи также неупорядочены).

Были бы B-деревья идеальными для моего случая, и если да, есть ли реализация B-деревьев в C #?

(Обратите внимание, что библиотека классов относится не к языку C #, а к платформе .NET!)

Я не знаю, почему вы специально упомянули B-деревья, но нет .NET BCL(библиотека базовых классов) не содержит реализацию B-деревьев.

Если вам нужно работать с постоянными структурами данных , то решение на основе дерева действительно может быть лучше, чем HashSet<T>, который является изменяемым.

0 голосов
/ 11 февраля 2012

При условии, что 1L == 1Lakh, это небольшая сумма.

Просто используйте тип коллекции, который не допускает дублирование, например HashSet:

Класс HashSet (Of T) обеспечивает высокопроизводительные операции над множествами.Набор - это коллекция, которая не содержит повторяющихся элементов и элементы которой расположены в произвольном порядке.

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