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

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

<b>    double sum = 0.0;</b>

<b>    Console.Write(&quot;Очередь содержит: &quot;);</b>

<b>    while(q.Count &gt; 0) {</b>

<b>      double val = q.Dequeue();</b>

<b>      Console.Write(val + &quot; &quot;);</b>

<b>      sum += val;.</b>

<b>    }</b>

<b>    Console.WriteLine(&quot;nИтоговая сумма равна &quot; +• sum);</b>

<b>  }</b>

<b>}</b>

Вот к какому результату приводит выполнение этой программы.

<b>Очередь содержит: 98.6 212 32 3.1416</b>

<b>Итоговая сумма равна 345.7416</b>

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

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

<b>public HashSet()</b>

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

<b>public HashSet(IEqualityCompare comparer)</b>

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

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

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

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

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

Оно позволяет получать метод сравнения для вызывающего хеш-множества.

Ниже приведен конкретный пример применения класса HashSet&lt;T&gt;.

<b>// Продемонстрировать применение класса HashSet&lt;T&gt;.</b>

<b>using System;</b>

<b>using System.Collections.Generic;</b>

<b>class HashSetDemo {</b>

<b>  static void Show(</b><b>string msg, HashSet&lt;char&gt; set) {</b>

<b>    Console.Write(msg);</b>

<b>    foreach(char ch in set)</b>

<b>      Console.Write(ch + &quot; &quot;);</b>

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

<b>  }</b>

<b>  static void Main() {</b>

<b>    HashSet&lt;char&gt; setA = new HashSet&lt;char&gt;();</b>

<b>    HashSet&lt;char&gt; setB = new HashSet&lt;char&gt;();</b>

<b>    setA.Add('A');</b>

<b>    setA.Add('В');</b>

<b>    setA.Add('C');</b>

<b>    setB.Add('C');</b>

<b>    setB.Add('D');</b>

<b>    setB.Add('Е');</b>

<b>    Show(&quot;Исходное содержимое множества setA: &quot;, setA);</b>

<b>    Show(&quot;Исходное содержимое множества setB: &quot;, setB);</b>

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

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

<b>        &quot;разноименности со множеством SetB: &quot;, setA);</b>