Чтение онлайн

на главную - закладки

Жанры

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

Ниже перечислены четыре наиболее часто используемые конструктора, определенных в классе SortedSet<T>.

public SortedSetO

public SortedSet(IEnumerable<T> collection) public SortedSet(IComparer comparer)

public SortedSet(IEnumerable<T> collection, IComparer comparer)

В первой форме конструктора создается пустое множество, а во второй форме — множество,

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

В классе SortedSet<T> реализуется интерфейс ISet<T>, а следовательно, в нем предоставляется полный набор операций со множествами. В этом классе предоставляется также метод GetViewBetween , возвращающий часть множества в форме объекта типа SortedSet<T>, метод RemoveWhere , удаляющий из множества элементы, не удовлетворяющие заданному условию, или предикату, а также метод Reverse , возвращающий объект типа IEnumerable<T>, который циклически проходит множество в обратном порядке.

Помимо свойств, определенных в интерфейсах, которые реализуются в классе SortedSet<T>, в него введены дополнительные свойства, приведенные ниже.

public IComparer<T> Comparer { get; } public T Max { get; } public T Min { get; }

Свойство Comparer получает способ сравнения для вызывающего множества. Свойство Мах получает наибольшее значение во множестве, а свойство Min — наименьшее значение во множестве.

В качестве примера применения класса SortedSet<T> на практике просто замените обозначение HashSet на SortedSet в исходном коде программы из предыдущего подраздела, посвященного коллекциям типа HashSet<T>.

Параллельные коллекции

В версию 4.0 среды .NET Framework добавлено новое пространство имен System. Collections . Concurrent. Оно содержит коллекции, которые являются потокобезопасными и специально предназначены для параллельного программирования. Это означает, что они могут безопасно использоваться в многопоточной программе, где возможен одновременный доступ к коллекции со стороны двух или больше параллельно исполняемых потоков. Ниже перечислены классы параллельных коллекций.

Параллельная коллекция

Описание

BlockingCollection<T>

Предоставляет оболочку для блокирующей реализации интерфейса IProducerConsumerCollection<T>

ConcurrentBag<T>

Обеспечивает

неупорядоченную реализацию интерфейса

IProducerConsumerCollection<T>, которая оказыва

ется наиболее пригодной в том случае, когда информация вырабатывается и потребляется в одном потоке

ConcurrentDictionary

Сохраняет пары “ключ-значение", а значит, реализует парал

<TKey, TValue>

лельный словарь

ConcurrentQueue<T>

Реализует параллельную очередь и соответствующий вариант интерфейса IProducerConsumerCollection<T>

ConcurrentStack<T>

Реализует параллельный стек и соответствующий вариант интерфейса IproducerConsumerCollection<T>

Как видите, в нескольких классах параллельных коллекций реализуется интерфейс IProducerConsumerCollection. Этот интерфейс также определен в пространстве имен System. Collections . Concurrent. Он служит в качестве расширения интерфейсов IEnumerable, IEnumerable<T> и ICollection. Кроме того, в нем определены методы TryAdd () и TryTake , поддерживающие шаблон "поставщик-потребитель". (Классический шаблон "поставщик-потребитель" отличается решением двух задач. Первая задача производит элементы коллекции, а другая потребляет их.) Метод TryAdd пытается добавить элемент в коллекцию, а метод TryTake — удалить элемент из коллекции. Ниже приведены формы объявления обоих методов.

bool TryAdd(Т item) bool TryTake(out T item)

Метод TryAdd возвращает логическое значение true, если в коллекцию добавлен элемент i tem. А метод TryTake возвращает логическое значение true, если элемент i tem удален из коллекции. Если метод TryAdd выполнен успешно, то элемент i tern будет содержать объект. (Кроме того, в интерфейсе IProducerConsumerCollection указывается перегружаемый вариант метода CopyTo , определяемого в интерфейсе ICollection, а также метода ТоАггау , копирующего коллекцию в массив.)

Параллельные коллекции зачастую применяются в комбинации с библиотекой распараллеливания задач (TPL) или языком PLINQ. В силу особого характера этих коллекций все их классы не будут рассматриваться далее подробно. Вместо этого на конкретных примерах будет дан краткий обзор класса BlockingCollection<T>. Усвоив основы построения класса BlockingCollection<T>, вы сможете без особого труда разобраться и в остальных классах параллельных коллекций.

Поделиться:
Популярные книги

Привет из Загса. Милый, ты не потерял кольцо?

Лисавчук Елена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Привет из Загса. Милый, ты не потерял кольцо?

Измена дракона. Развод неизбежен

Гераскина Екатерина
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Измена дракона. Развод неизбежен

Титан империи

Артемов Александр Александрович
1. Титан Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Титан империи

Бастард

Осадчук Алексей Витальевич
1. Последняя жизнь
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.86
рейтинг книги
Бастард

Мой личный враг

Устинова Татьяна Витальевна
Детективы:
прочие детективы
9.07
рейтинг книги
Мой личный враг

Русь. Строительство империи

Гросов Виктор
1. Вежа. Русь
Фантастика:
альтернативная история
рпг
5.00
рейтинг книги
Русь. Строительство империи

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Неудержимый. Книга XVIII

Боярский Андрей
18. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVIII

Сердце для стража

Каменистый Артем
5. Девятый
Фантастика:
фэнтези
боевая фантастика
9.20
рейтинг книги
Сердце для стража

Истребитель. Ас из будущего

Корчевский Юрий Григорьевич
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.25
рейтинг книги
Истребитель. Ас из будущего

Хозяйка дома в «Гиблых Пределах»

Нова Юлия
Любовные романы:
любовно-фантастические романы
5.75
рейтинг книги
Хозяйка дома в «Гиблых Пределах»

Найденыш

Гуминский Валерий Михайлович
1. Найденыш
Фантастика:
альтернативная история
6.00
рейтинг книги
Найденыш

Невеста напрокат

Завгородняя Анна Александровна
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Невеста напрокат