Установить работу в .NET C # - PullRequest
       43

Установить работу в .NET C #

4 голосов
/ 22 сентября 2008

Я сейчас работаю над чем-то связанным с набросками. В проекте используется множество наборов операций и манипуляций. Я использовал строковые операции как меру остановки пробела для операции над множествами. Он работал нормально до тех пор, пока нам не понадобилось обрабатывать некоторый безбожный объем данных (500 000 записей по 40+ столбцов в каждой) через алгоритм.

Я знаю, что в .net 2.0 нет заданной структуры данных (2.0 был последним, когда я запускал проект). Я хочу знать, есть ли какая-либо библиотека, которая предлагает быструю установку множеств в .net c #, или добавлен 3.5 собственная структура данных набора.

Спасибо.

Ответы [ 9 ]

10 голосов
/ 22 сентября 2008

.NET 3.5 уже имеет собственный тип данных набора: HashSet . Вы также можете посмотреть на операторы набора HashSet и LINQ для операций.

В .NET 1.0 был установлен сторонний тип данных Set: Iesi.Collections , который был расширен с помощью обобщений .NET 2.0 с Iesi.Collections.Generic .

Возможно, вы захотите попробовать посмотреть на них всех, чтобы понять, какой из них принесет вам наибольшую пользу. :)

5 голосов
/ 22 сентября 2008

LINQ поддерживает некоторые операции над множествами. См. LINQ 101 page для примеров.
Также есть класс HashSet (.NET 3.5)


Вот рекомендации Microsoft для операций над множествами в .NET:

Операции HashSet и LINQ Set

Список операций над множествами, поддерживаемых классом HasSet:

Тип коллекции HashSet

2 голосов
/ 22 сентября 2008

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

Обратите внимание, что я не особо разбирался в этом, но, похоже, это довольно фантастическая библиотека коллекций.

2 голосов
/ 22 сентября 2008

Обновление: это для .Net 2.0. Для .Net 3.5 см. Сообщения от aku, Jon ..

Это хороший справочник для , эффективно представляющих наборы в .Net .

1 голос
/ 22 сентября 2008

Я злоупотребляю классом Dictionary в .NET 2.0 как набором:

private object dummy = "ok";

public void Add(object el) {
  dict[el] = dummy;
}

public bool Contains(object el) {
  return dict.ContainsKey(el);
}
1 голос
/ 22 сентября 2008

Попробуйте HashSet в .NET 3.5.

Эта страница от члена команды .NET BCL содержит полезную информацию о намерениях HashSet

0 голосов
/ 22 сентября 2008

Вам следует взглянуть на C5 Generic Collection Library . Эта библиотека представляет собой системный подход к исправлению дыр в библиотеке классов .NET путем предоставления отсутствующих структур, а также замены существующих набором хорошо разработанных интерфейсов и общих классов.

Среди прочих есть HashSet<T> - универсальный класс Set, основанный на линейном хешировании.

0 голосов
/ 22 сентября 2008

Вы когда-нибудь думали о пении F #? Это похоже на работу для функционального языка программирования.

0 голосов
/ 22 сентября 2008

Вы можете использовать Linq to Objects в C # 3.0.

...