Autor: Enriberguison Moraes | Publicado: 2016-10-05T11:28:00-03:00





HashSet&lt;T&gt;&nbsp;Class

O C# possui um tipo de coleção denominada HashSet&lt;T&gt;. Um Sets é uma coleção não ordenada sem itens duplicado, funciona de maneira similar a uma lista, mas oferece operações de conjunto matemático como União e Interseção.&nbsp;

O conceito Sets vem da matemática. Pense num conjunto de gênero (fêmea e macho) , o conjunto de dias da semana, o conjunto de variações do triangulo. Diferente de conjuntos&nbsp;matemáticos&nbsp;os conjuntos em C# não podem ser infinitos , mas podem ser tão amplos quanto a memoria&nbsp;disponível.&nbsp;



Como Dicionários, sets são implementados usando tabelas hash. Sets são tipos de&nbsp;dicionários&nbsp;com chaves mas sem valores , fazendo com que eles tenham formas de lista.



Para criar um HashSet&lt;T&gt;, você pode fazer isso:



HashSet&lt;int&gt; pequenosNumeros = new HashSet&lt;int&gt;();

pequenosNumeros .Add(2);


pequenosNumeros .Add(3);




Ou, mais conveniente , você pode adicionar usando um&nbsp;inicializador&nbsp;de coleção:



HashSet&lt;int&gt; pequenosNumeros = new HashSet&lt;int&gt;{2 ,3 , 5, 7, 11, 13};



Ou você pode criar um conjunto a partir de uma coleção existente:



List&lt;int&gt; intList = new List&lt;int&gt;{0 ,1 ,2 , 3 ,4 ,5 ,6 ,7 8 , 9 ,10};

HAshSet &lt;int&gt; numeros = new HasSet&lt;int&gt;(intList);





Se você tentar adicionar u elemento que já existe no HashSet , exemplo:

pequenosNumeros .Add(2);





... o copilador não trata coo erro o&nbsp;método&nbsp;Add(), devolve verdadeiro se ocorreu a inclusão e falso se não houve alteração no conjunto.



Veremos um exemplo utilizando um importante método, o UnionWhit(). Esse método faz a união de coleções sem duplicar elementos.



Abra o console do Visual Studio e faça você o teste.




List&lt;string&gt; colors = new List&lt;string&gt; { "vermelho", "amarelo", "laranja" };

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string[] maisCores = { "laranja","amarelo","verde","azul","violeta"};

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Adiciona a primeira coleção ao HashSet

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HashSet&lt;string&gt; cobinando = new HashSet&lt;string&gt;(colors);



&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Utilizando o método UnionWith()

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cobinando.UnionWith(maisCores);



&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Exibindo as cores sem duplicação

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach (var item in cobinando)

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(item);

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }

O outro método interessante &nbsp;que o HashSet possui é o IntersectWith(); que dá a você os itens sobrepostos entre duas coleções, observe o código abaixo:

Console.WriteLine("Buscando a sobreposição em duas listas");
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List&lt;string&gt; CandidatosPresidencia = new List&lt;string&gt; { "Clinton", "Eduard", "Obama" ,"McCain","Giuliani"};
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string[] senadores = { "Alexader", "Boxer", "Clinton", "Eduard", "Obama" ,"Snowe"};

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Adiciona a primeira coleção ao HashSet
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HashSet&lt;string&gt; trabalhaSenado = new HashSet&lt;string&gt;(CandidatosPresidencia);

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Utilizando o método IntersectWith()
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;trabalhaSenado.IntersectWith(senadores);

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Exibindo as condidatos que se repetem
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach (var item in trabalhaSenado)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(item);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.ReadKey();

E ainda existe a possibilidade de fazer de forma contrária, remove os elementos que estejam duplicados em ambas as listas com o método EXcepWith();

&nbsp;Console.WriteLine("Removendo as exceções em duas listas");
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Queue&lt;int&gt; unicos = new Queue&lt;int&gt;( new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 ,10});
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HashSet &lt;int&gt; impares = new HashSet&lt;int&gt; {1, 3, 5, 7, 9, 11};



&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Utilizando o método ExceptWith()
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; impares.ExceptWith(impares);

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Exibindo os numeros que não se repetem
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach (var item in impares)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(item);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.ReadKey();
&nbsp; &nbsp; &nbsp; &nbsp; }

Obs: Veja a documentação deste tipo de coleção no link,&nbsp;Microsoft.





"&nbsp;A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."&nbsp;Albert Einstein