Добавить в цитаты Настройки чтения

Страница 471 из 502

<b>    setA.UnionWith(setB);</b>

<b>    Show(&quot;Содержимое множества setA после &quot; +</b>

<b>        &quot;объединения со множеством SetB: &quot;, setA);</b>

<b>    setA.ExceptWith(setB);</b>

<b>    Show(&quot;Содержимое множества setA после &quot; +</b>

<b>        &quot;вычитания из множества setB: &quot;, setA);</b>

<b>    Console.WriteLine();</b>

<b>  }</b>

<b>}</b>

Ниже приведен результат выполнения программы из данного примера.

Исходное содержимое множества setA: A B C

Исходное содержимое множества setB: С D Е

Содержимое множества setA после разноименности со множеством SetB: А В D Е

Содержимое множества setA после объединения со множеством SetB: А В D Е С

Содержимое множества setA после вычитания из множества setB: А В

Класс SortedSet&lt;T&gt; представляет собой новую разновидность коллекции, введенную в версию 4.0 среды .NET Framework. В нем поддерживается коллекция, реализующая отсортированное множество. В классе SortedSet&lt;T&gt; реализуются интерфейсы ISet&lt;T&gt;, ICollection, ICollection&lt;T&gt;, IEnumerable, IEnumerable&lt;T&gt;, ISerializable, а также IDeserializationCallback. В коллекции типа SortedSet&lt;T&gt; реализуется множество, все элементы которого являются уникальными. Иными словами, дубликаты в таком множестве не допускаются. В классе SortedSet&lt;T&gt; определяется полный набор операций с множеством, определенных в интерфейсе ISet&lt;T&gt;, включая пересечение, объединение и разноименность. Благодаря тому что все элементы коллекции типа SortedSet&lt;T&gt; сохраняются в отсортированном порядке, класс SortedSet&lt;T&gt; оказывается идеальным средством для работы с отсортированными множествами объектов. Коллекция типа SortedSet&lt;T&gt; имеет динамический характер и расширяется по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться.

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

<b>public SortedSetO</b>

<b>public SortedSet(IEnumerable&lt;T&gt; collection)</b>

<b>public SortedSet(IComparer comparer)</b>

<b>public SortedSet(IEnumerable&lt;T&gt; collection, IComparer comparer)</b>

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

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

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

<b>public IComparer&lt;T&gt; Comparer { get; }</b>

<b>public T Max { get; }</b>

<b>public T Min { get; }</b>

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

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

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

В версию 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>