Programavimas

Kaip naudoti „HashSet“ C #

„HashSet“ yra optimizuota nesutvarkytų, unikalių elementų kolekcija, suteikianti greitą paiešką ir efektyvias rinkinio operacijas. „HashSet“ klasė pirmą kartą buvo pristatyta .NET 3.5 ir yra „System.Collection.Generic“ vardų srities dalis. Šiame straipsnyje kalbama apie tai, kaip mes galime dirbti su „HashSets“ C #.

Norėdami dirbti su šiame straipsnyje pateiktais kodų pavyzdžiais, sistemoje turite būti įdiegę „Visual Studio 2019“. Jei dar neturite kopijos, galite atsisiųsti „Visual Studio 2019“ čia.

„Visual Studio“ sukurkite .NET Core konsolės programos projektą

Pirmiausia sukurkime .NET Core Console Application projektą „Visual Studio“. Darant prielaidą, kad „Visual Studio 2019“ yra įdiegta jūsų sistemoje, atlikite toliau nurodytus veiksmus, kad sukurtumėte naują „.NET Core Console“ programos projektą „Visual Studio“.

  1. Paleiskite „Visual Studio IDE“.
  2. Spustelėkite „Sukurti naują projektą“.
  3. Lange „Kurti naują projektą“ iš rodomų šablonų sąrašo pasirinkite „Console App (.NET Core)“.
  4. Spustelėkite Pirmyn.
  5. Tada rodomame lange „Konfigūruoti naują projektą“ nurodykite naujo projekto pavadinimą ir vietą.
  6. Spustelėkite Sukurti.

Tai sukurs naują „.NET Core“ konsolės programos projektą „Visual Studio 2019“. Mes naudosime šį projektą dirbdami su „HashSet“ tolesniuose šio straipsnio skyriuose.

Kas yra „HashSet“?

„HashSet“ - „HashSet“ klasės, susijusios su „System.Collections“. Bendroji vardų sritis - tai didelio našumo, nesutvarkyta unikalių elementų kolekcija. Taigi „HashSet“ nėra rūšiuojamas ir jame nėra jokių pasikartojančių elementų. „HashSet“ taip pat nepalaiko indeksų - galite naudoti tik surašinėtojus. „HashSet“ paprastai naudojamas didelio našumo operacijoms, susijusioms su unikalių duomenų rinkiniu.

„HashSet“ klasėje įdiegtos kelios sąsajos, kaip parodyta žemiau:

public class 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

Kadangi „HashSet“ yra tik unikalūs elementai, jo vidinė struktūra yra optimizuota greitesnei paieškai. Atminkite, kad „HashSet“ galite išsaugoti vieną nulinę vertę. Taigi, „HashSet“ yra geras pasirinkimas, kai norite kolekcijos, kurioje yra unikalių elementų, o kolekcijos elementų galima greitai ieškoti.

Ieškoti elemento HashSet rinkinyje C #

Norėdami ieškoti elemento „HashSet“ rinkinyje, galite naudoti metodą „Yra“, kaip parodyta toliau pateiktame kodo fragmente:

static void Main (string [] args)

        {

HashSet hashSet = naujas HashSet ();

hashSet.Add ("A");

hashSet.Add ("B");

hashSet.Add ("C");

hashSet.Add ("D");

jei (hashSet.Contains ("D"))

Console.WriteLine ("Galimas reikalingas elementas.");

Kitas

Console.WriteLine ("Reikalingas elementas nepasiekiamas.");

Pultas.ReadKey ();

        }

„HashSet“ elementai visada yra unikalūs

Jei bandysite į „HashSet“ įterpti pasikartojantį elementą, jis tiesiog bus ignoruojamas, tačiau vykdymo laiko išimtis nebus išmetama. Tai iliustruoja šis kodo fragmentas.

static void Main (string [] args)

{

HashSet hashSet = naujas HashSet ();

hashSet.Add ("A");

hashSet.Add ("B");

hashSet.Add ("C");

hashSet.Add ("D");

hashSet.Add ("D");

Console.WriteLine ("Elementų skaičius yra: {0}", hashSet.Count);

Pultas.ReadKey ();

}

Kai vykdote programą, išvestis bus tokia, kaip parodyta 1 paveiksle.

Dabar apsvarstykite šį kodo fragmentą, kuris parodo, kaip pašalinami pasikartojantys elementai:

eilutė [] miestai = nauja eilutė [] {

„Delis“,

„Kolkata“,

"Niujorkas",

„Londonas“,

„Tokijas“,

„Vašingtonas“,

„Tokijas“

            };

HashSet hashSet = naujas HashSet (miestai);

foreach (var city in hashSet)

            {

Console.WriteLine (miestas);

            }

Kai vykdote pirmiau nurodytą programą, pasikartojantys miestų pavadinimai bus pašalinti.

Pašalinti elementus iš „HashSet“ C #

Norėdami pašalinti elementą iš „HashSet“, turite paskambinti pašalinimo metodu. Metodo „Pašalinti“ sintaksė pateikta žemiau.

public bool Pašalinti (T elementas);

Jei elementas randamas kolekcijoje, metodas Pašalinti pašalina elementą iš „HashSet“ ir grąžina „true“, jei nesiseka, kitaip - „false“.

Žemiau pateiktas kodo fragmentas parodo, kaip galite naudoti šalinimo metodą, kad pašalintumėte elementą iš „HashSet“.

eilutės elementas = "D";

jei (hashSet.Contains (elementas))

{

hashSet.Remove (elementas);

}

Norėdami pašalinti visus elementus iš „HashSet“, galite naudoti išvalymo metodą.

Naudokite HashSet rinkinio operacijų metodus C #

„HashSet“ turi keletą svarbių rinkinio operacijų metodų, tokių kaip „IntersectWith“, „UnionWith“, „IsProperSubsetOf“, „ExceptWith“ ir „SymmetricExceptWith“.

IsProperSubsetOf

IsProperSubsetOf metodas naudojamas nustatyti, ar „HashSet“ egzempliorius yra tinkamas rinkinio pogrupis. Tai iliustruojama toliau pateiktame kodo fragmente.

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"};

jei (setA.IsProperSubsetOf (setC))

Console.WriteLine ("setC yra visi setA elementai.");

jei (! setA.IsProperSubsetOf (setB))

Console.WriteLine ("setB nėra visų setA elementų.");

Vykdydami aukščiau nurodytą programą, konsolės lange turėtumėte pamatyti šį išvestį.

Sąjunga su

„UnionWith“ metodas naudojamas rinkinių pridėjimui, kaip parodyta toliau pateiktame kodo fragmente.

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

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

setA.UnionWith (rinkinysB);

foreach (eilutės eilutė setA)

{

Console.WriteLine (str);

}

Kai vykdote pirmiau nurodytą kodo dalį, setB elementai nukopijuojami į setA. Taigi „setA“ dabar bus „A“, „B“, „C“, „D“, „E“, „X“ ir „Y“.

Susikerta su

„IntersectWith“ metodas naudojamas dviejų „HashSets“ susikirtimų atvaizdavimui. Štai pavyzdys, kaip tai suprasti.

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

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

setA.IntersectWith (setB);

foreach (eilutės eilutė setA)

{

Console.WriteLine (str);

}

Paleidus aukščiau nurodytą programą, konsolės lange bus rodomi tik bendri abiem „HashSets“ elementai. Rezultatas atrodys taip:

Išskyrus Su

Metodas „ExceptWith“ reiškia matematinį aibės atimimą ir yra O (n) operacija. Tarkime, kad turite du „HashSets“ rinkinius „setA“ ir „setB“ ir nurodote šį teiginį:

setA.ExceptWith (setB);

Tai grąžins setA elementus, kurių nėra rinkinyjeB. Supraskime tai su kitu pavyzdžiu. Apsvarstykite toliau pateiktą kodo fragmentą.

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

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

setA.ExceptWith (setB);

foreach (eilutės eilutė setA)

{

Console.WriteLine (str);

}

Kai vykdote aukščiau nurodytą programą, elementai „B“, „D“ ir „E“ bus atspausdinti konsolės lange, kaip parodyta 5 paveiksle.

SymmetricExceptWith

„SymmetricExceptWith“ metodas naudojamas modifikuojant „HashSet“, kad jame būtų tik unikalūs dviejų „HashSets“ elementų elementai, t. Y. Elementai, kurie nėra būdingi abiem „HashSets“. Apsvarstykite šį kodą, kuris tai iliustruoja.

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

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

setA.SymmetricExceptWith (rinkinysB);

foreach (eilutė str setA)

{

Console.WriteLine (str);

}

Vykdant aukščiau nurodytą kodą, konsolės lange bus rodomi tik unikalūs „setA“ ir „setB“ elementai, ty elementai, esantys „setA“, bet ne rinkinyjeB, ir elementai, esantys „setB“, bet ne rinkinyje „A“. kaip parodyta 6 paveiksle.

Nors vidutinis masyvo prieigos prie elemento sudėtingumas yra O (n), kur n reiškia masyvo elementų skaičių, prieigos prie konkretaus elemento „HashSet“ sudėtingumas yra tik O (1). Tai leidžia „HashSet“ pasirinkti greitas paieškas ir atlikti nustatytas operacijas. Sąrašą galite naudoti, jei norite saugoti daiktų kolekciją tam tikra tvarka ir galbūt įtraukti kopijas.

Kaip padaryti daugiau C #:

  • Kaip naudoti pavadintus ir pasirenkamus parametrus C #
  • Kaip palyginti C # kodą naudojant „BenchmarkDotNet“
  • Kaip naudoti sklandžias sąsajas ir metodų susiejimą C #
  • Kaip susieti statinius metodus C #
  • Kaip performuoti Dievo objektus C #
  • Kaip naudoti „ValueTask“ C #
  • Kaip naudoti nekintamumą C
  • Kaip naudoti const, readonly ir static C #
  • Kaip naudoti duomenų komentarus C #
  • Kaip dirbti su GU # C # 8
  • Kada naudoti abstrakčią klasę ir sąsają C #
  • Kaip dirbti su „AutoMapper“ C #
  • Kaip naudoti lambda išraiškas C #
  • Kaip dirbti su „Action“, „Func“ ir „Predicate“ delegatais C #
  • Kaip dirbti su delegatais C #
  • Kaip įdiegti paprastą kaupiklį C #
  • Kaip dirbti su atributais C #
  • Kaip dirbti su „Log4net“ C #
  • Kaip įgyvendinti saugyklos dizaino modelį C #
  • Kaip dirbti su atspindžiu C #
  • Kaip dirbti su failų stebėjimo programa C #
  • Kaip atlikti tingų inicializavimą C #
  • Kaip dirbti su MSMQ C #
  • Kaip dirbti su plėtinių metodais C #
  • Kaip mums lambda išraiškos C #
  • Kada naudoti nepastovų raktinį žodį C #
  • Kaip naudoti pajamingumo raktinį žodį C #
  • Kaip įgyvendinti polimorfizmą C #
  • Kaip sukurti savo užduočių planavimo priemonę C #
  • Kaip dirbti su „RabbitMQ“ C #
  • Kaip dirbti su dvigubu C #
  • Naršyti virtualius ir abstrakčius metodus C #
  • Kaip naudoti Dapper ORM C #
  • Kaip naudoti „flyweight“ dizaino modelį C #
$config[zx-auto] not found$config[zx-overlay] not found