Programiranje

Kako uporabljati HashSet v C #

HashSet je optimizirana zbirka neurejenih, edinstvenih elementov, ki omogoča hitro iskanje in visoko zmogljive nastavljene operacije. Razred HashSet je bil prvič predstavljen v .NET 3.5 in je del imenskega prostora System.Collection.Generic. Ta članek govori o tem, kako lahko delamo s HashSets v C #.

Če želite delati s primeri kod v tem članku, morate imeti v sistemu nameščen Visual Studio 2019. Če kopije še nimate, lahko Visual Studio 2019 prenesete tukaj.

Ustvarite projektni program konzole .NET Core v Visual Studio

Najprej ustvarimo projekt aplikacije .NET Core Console v Visual Studio. Če predpostavimo, da je Visual Studio 2019 nameščen v vašem sistemu, sledite spodnjim korakom, da v Visual Studio ustvarite nov aplikacijski projekt .NET Core Console.

  1. Zaženite Visual Studio IDE.
  2. Kliknite »Ustvari nov projekt«.
  3. V oknu »Ustvari nov projekt« na seznamu predlog izberite »Console App (.NET Core)«.
  4. Kliknite Naprej.
  5. V naslednjem oknu »Konfiguriranje novega projekta« določite ime in mesto novega projekta.
  6. Kliknite Ustvari.

Tako boste ustvarili nov aplikacijski projekt konzole .NET Core v Visual Studio 2019. Ta projekt bomo uporabili za delo s sistemom HashSet v naslednjih razdelkih tega članka.

Kaj je HashSet?

HashSet - ki ga predstavlja razred HashSet, ki se nanaša na imenski prostor System.Collections.Generic - je visoko zmogljiva, neurejena zbirka unikatnih elementov. Zato HashSet ni razvrščen in ne vsebuje podvojenih elementov. HashSet tudi ne podpira indeksov - lahko uporabite samo števce. HashSet se običajno uporablja za visoko zmogljive operacije, ki vključujejo nabor edinstvenih podatkov.

Razred HashSet izvaja več vmesnikov, kot je prikazano spodaj:

javni razred HashSet: System.Collections.Generic.ICollection,

System.Collections.Generic.IEnumerable,

System.Collections.Generic.IReadOnlyCollection,

System.Collections.Generic.ISet,

System.Runtime.Serialization.IDeserializationCallback,

System.Runtime.Serialization.ISerializable

Ker HashSet vsebuje samo edinstvene elemente, je njegova notranja struktura optimizirana za hitrejše iskanje. Upoštevajte, da lahko v HashSet shranite eno samo ničelno vrednost. Torej je HashSet dobra izbira, če želite zbirko, ki vsebuje edinstvene elemente in je elemente v zbirki mogoče hitro iskati.

Poiščite element v HashSet-u v C #

Za iskanje elementa v HashSetu lahko uporabite metodo Contains, kot je prikazano v spodnjem delčku kode:

statična praznina Main (string [] args)

        {

HashSet hashSet = nov HashSet ();

hashSet.Add ("A");

hashSet.Add ("B");

hashSet.Add ("C");

hashSet.Add ("D");

if (hashSet.Contains ("D"))

Console.WriteLine ("Zahtevani element je na voljo.");

drugače

Console.WriteLine ("Zahtevani element ni na voljo.");

Console.ReadKey ();

        }

Elementi HashSet so vedno unikatni

Če poskušate podvojeni element vstaviti v HashSet, bi bil preprosto prezrt, vendar izjema med izvajanjem ne bo. Naslednji delček kode to ponazarja.

statična praznina Main (string [] args)

{

HashSet hashSet = nov HashSet ();

hashSet.Add ("A");

hashSet.Add ("B");

hashSet.Add ("C");

hashSet.Add ("D");

hashSet.Add ("D");

Console.WriteLine ("Število elementov je: {0}", hashSet.Count);

Console.ReadKey ();

}

Ko zaženete program, bo izhod prikazan, kot je prikazano na sliki 1.

Zdaj razmislite o naslednjem delčku kode, ki prikazuje, kako se odstranijo podvojeni elementi:

niz [] mest = nov niz [] {

"Delhi",

"Kolkata",

"New York",

"London",

"Tokio",

"Washington",

"Tokio"

            };

HashSet hashSet = nov HashSet (mesta);

foreach (var mesto v hashSet)

            {

Console.WriteLine (mesto);

            }

Ko zaženete zgornji program, se podvojena imena mest odstranijo.

Odstranitev elementov iz kompleta HashSet v C #

Če želite element odstraniti iz sklopa HashSet, pokličite metodo Odstrani. Sintaksa metode Odstrani je podana spodaj.

javni bool Odstrani (T element);

Če je element najden v zbirki, metoda Remove odstrani element iz HashSet-a in ob uspehu vrne true, sicer false.

Spodnji delček kode ponazarja, kako lahko z metodo Odstrani odstranite element iz nabora HashSet.

niz element = "D";

if (hashSet.Contains (item))

{

hashSet.Remove (element);

}

Če želite odstraniti vse elemente iz HashSet-a, lahko uporabite metodo Clear.

Uporabite HashSet set načinov delovanja v C #

HashSet ima številne pomembne metode za določene operacije, kot so IntersectWith, UnionWith, IsProperSubsetOf, ExceptWith in SymmetricExceptWith.

IsProperSubsetOf

Metoda IsProperSubsetOf se uporablja za ugotavljanje, ali je primerek HashSet ustrezna podmnožica zbirke. To je prikazano v spodnjem delčku kode.

HashSet setA = new HashSet () {"A", "B", "C", "D"};

HashSet setB = new HashSet () {"A", "B", "C", "X"};

HashSet setC = new HashSet () {"A", "B", "C", "D", "E"};

if (setA.IsProperSubsetOf (setC))

Console.WriteLine ("setC vsebuje vse elemente kompletaA.");

if (! setA.IsProperSubsetOf (setB))

Console.WriteLine ("setB ne vsebuje vseh elementov kompletaA.");

Ko zaženete zgornji program, bi morali v oknu konzole videti naslednji izhod.

UnionWith

Za dodajanje nabora se uporablja metoda UnionWith, kot je prikazano v spodnjem delčku kode.

HashSet setA = new HashSet () {"A", "B", "C", "D", "E"};

HashSet setB = new HashSet () {"A", "B", "C", "X", "Y"};

setA.UnionWith (setB);

foreach (niz str v nizu A)

{

Console.WriteLine (str);

}

Ko izvedete zgornji del kode, se elementi setB kopirajo v setA. Tako bo setA zdaj vključeval "A", "B", "C", "D", "E", "X" in "Y".

IntersectWith

Metoda IntersectWith se uporablja za predstavitev presečišča dveh HashSetov. Tukaj je primer, kako to razumeti.

HashSet setA = new HashSet () {"A", "B", "C", "D", "E"};

HashSet setB = new HashSet () {"A", "X", "C", "Y"};

setA.IntersectWith (setB);

foreach (niz str v nizu A)

{

Console.WriteLine (str);

}

Ko zaženete zgornji program, bodo v oknu konzole prikazani samo elementi, skupni obema sklopoma hash. Rezultat bi bil videti tako:

Razen z

Metoda ExceptWith predstavlja matematično odštevanje množic in je operacija O (n). Recimo, da imate dva kompleta HashSet setA in setB, in določite naslednjo izjavo:

setA.ExceptWith (setB);

To bi vrnilo elemente nabora A, ki niso prisotni v naboru B. Razumimo to z drugim primerom. Upoštevajte spodnji delček kode.

HashSet setA = new HashSet () {"A", "B", "C", "D", "E"};

HashSet setB = new HashSet () {"A", "X", "C", "Y"};

setA.ExceptWith (setB);

foreach (niz str v nizu A)

{

Console.WriteLine (str);

}

Ko zaženete zgornji program, bodo elementi "B", "D" in "E" natisnjeni v okno konzole, kot je prikazano na sliki 5.

SymmetricExceptWith

Metoda SymmetricExceptWith se uporablja za spreminjanje nabora HashSet, tako da vsebuje samo unikatne elemente dveh HashSetov, tj. Upoštevajte naslednji delček kode, ki to ponazarja.

HashSet setA = new HashSet () {"A", "B", "C", "D", "E"};

HashSet setB = new HashSet () {"A", "X", "C", "Y"};

setA.SymmetricExceptWith (setB);

foreach (niz str v nizu A)

{

Console.WriteLine (str);

}

Ko izvedete zgornjo kodo, bodo v oknu konzole prikazani samo edinstveni elementi setA in setB - tj. Elementi, ki so prisotni v setA, ne pa tudi v setB, in elementi, ki so prisotni v setB, ne pa tudi v setA. kot je prikazano na sliki 6.

Medtem ko je povprečna zahtevnost dostopa do elementa v matriki O (n), kjer n predstavlja število elementov v matriki, je kompleksnost le O (1) za dostop do določenega elementa v HashSetu. Zaradi tega je HashSet dobra izbira za hitro iskanje in izvajanje določenih operacij. Seznam lahko uporabite, če želite shraniti zbirko predmetov v določenem vrstnem redu in morda vključite tudi dvojnike.

Kako narediti več v jeziku C #:

  • Kako uporabljati imenovane in neobvezne parametre v jeziku C #
  • Kako primerjati kodo C # z uporabo BenchmarkDotNet
  • Kako uporabljati tekoče vmesnike in verigo metod v jeziku C #
  • Kako enotno preizkusiti statične metode v C #
  • Kako preoblikovati božje predmete v C #
  • Kako uporabljati ValueTask v jeziku C #
  • Kako uporabiti nespremenljivost v C
  • Kako uporabljati const, readonly in static v C #
  • Kako uporabljati pripise podatkov v jeziku C #
  • Kako delati z GUID-i v C # 8
  • Kdaj uporabiti abstraktni razred v primerjavi z vmesnikom v jeziku C #
  • Kako delati z AutoMapper v C #
  • Kako uporabljati lambda izraze v jeziku C #
  • Kako delati z delegati Action, Func in Predicate v C #
  • Kako delati z delegati v C #
  • Kako implementirati preprost zapisovalnik v jeziku C #
  • Kako delati z atributi v jeziku C #
  • Kako delati z log4net v C #
  • Kako implementirati vzorec oblikovanja repozitorija v C #
  • Kako delati z refleksijo v jeziku C #
  • Kako delati z nadzornikom datotek v C #
  • Kako izvesti leno inicializacijo v C #
  • Kako delati z MSMQ v C #
  • Kako delati z razširitvenimi metodami v jeziku C #
  • Kako do lambda izrazov v jeziku C #
  • Kdaj uporabiti hlapljivo ključno besedo v jeziku C #
  • Kako uporabiti ključno besedo yield v jeziku C #
  • Kako uporabiti polimorfizem v jeziku C #
  • Kako zgraditi lasten načrtovalnik opravil v C #
  • Kako delati z RabbitMQ v C #
  • Kako delati s korpico v jeziku C #
  • Raziskovanje virtualnih in abstraktnih metod v jeziku C #
  • Kako uporabljati Dapper ORM v C #
  • Kako uporabiti vzorec letenja v C #
$config[zx-auto] not found$config[zx-overlay] not found