Programovanie

Ako používať HashSet v C #

HashSet je optimalizovaná kolekcia neusporiadaných jedinečných prvkov, ktorá poskytuje rýchle vyhľadávanie a vysoko výkonné operácie so sadami. Trieda HashSet bola prvýkrát predstavená v .NET 3.5 a je súčasťou menného priestoru System.Collection.Generic. Tento článok hovorí o tom, ako môžeme pracovať s HashSets v C #.

Ak chcete pracovať s príkladmi kódu uvedenými v tomto článku, mali by ste mať vo svojom systéme nainštalovanú aplikáciu Visual Studio 2019. Ak ešte nemáte kópiu, môžete si tu stiahnuť Visual Studio 2019.

Vytvorte projekt konzolovej aplikácie .NET Core v Visual Studio

Najprv si vytvoríme projekt konzolovej aplikácie .NET Core v Visual Studio. Za predpokladu, že je vo vašom systéme nainštalované Visual Studio 2019, postupujte podľa krokov uvedených nižšie a vytvorte nový projekt konzolovej aplikácie .NET Core v Visual Studio.

  1. Spustite Visual Studio IDE.
  2. Kliknite na „Vytvoriť nový projekt“.
  3. V okne „Vytvoriť nový projekt“ vyberte zo zobrazeného zoznamu šablón „Console App (.NET Core)“.
  4. Kliknite na Ďalej.
  5. V nasledujúcom okne „Konfigurácia nového projektu“ zadajte názov a umiestnenie nového projektu.
  6. Kliknite na tlačidlo Vytvoriť.

Týmto sa vytvorí nový projekt konzolovej aplikácie .NET Core v Visual Studio 2019. Tento projekt použijeme na prácu s HashSet v ďalších častiach tohto článku.

Čo je to HashSet?

HashSet - predstavovaný triedou HashSet patriacou k System.Collections.Generic namespace - je vysoko výkonná neusporiadaná kolekcia jedinečných prvkov. HashSet teda nie je zoradený a neobsahuje žiadne duplicitné prvky. HashSet tiež nepodporuje indexy - môžete použiť iba enumerátory. HashSet sa zvyčajne používa na výkonné operácie, ktoré zahŕňajú množinu jedinečných údajov.

Trieda HashSet implementuje niekoľko rozhraní, ako je uvedené nižšie:

verejná trieda 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

Pretože HashSet obsahuje iba jedinečné prvky, je jeho vnútorná štruktúra optimalizovaná pre rýchlejšie vyhľadávanie. Upozorňujeme, že do sady HashSet môžete uložiť jednu nulovú hodnotu. HashSet je teda dobrou voľbou, ak chcete kolekciu, ktorá obsahuje jedinečné prvky, a prvky v kolekcii je možné rýchlo vyhľadať.

Vyhľadajte položku v HashSete v C #

Ak chcete vyhľadať položku v HashSete, môžete použiť metódu Obsahuje, ako je uvedené v útržku kódu uvedenom nižšie:

static void Main (reťazec [] args)

        {

HashSet hashSet = nový HashSet ();

hashSet.Add ("A");

hashSet.Add ("B");

hashSet.Add ("C");

hashSet.Add ("D");

if (hashSet.Contains ("D"))

Console.WriteLine („Je požadovaný prvok k dispozícii.“);

inak

Console.WriteLine („Požadovaný prvok nie je k dispozícii.“);

Console.ReadKey ();

        }

Prvky HashSet sú vždy jedinečné

Ak sa pokúsite vložiť duplikátny prvok do sady HashSet, bude to jednoducho ignorované, ale nebude vyvolaná žiadna runtime výnimka. Ilustruje to nasledujúci úryvok kódu.

static void Main (reťazec [] args)

{

HashSet hashSet = nový HashSet ();

hashSet.Add ("A");

hashSet.Add ("B");

hashSet.Add ("C");

hashSet.Add ("D");

hashSet.Add ("D");

Console.WriteLine ("Počet prvkov je: {0}", hashSet.Count);

Console.ReadKey ();

}

Po spustení programu bude výstup uvedený na obrázku 1.

Teraz zvážte nasledujúci útržok kódu, ktorý ilustruje, ako sú eliminované duplicitné prvky:

reťazec [] mestá = nový reťazec [] {

"Dillí",

"Kalkata",

"New York",

"Londýn",

„Tokio“,

"Washington",

„Tokio“

            };

HashSet hashSet = nový HashSet (mestá);

foreach (var city v hashSet)

            {

Console.WriteLine (mesto);

            }

Po vykonaní vyššie uvedeného programu by sa odstránili duplicitné názvy miest.

Odstrániť prvky z HashSet v C #

Ak chcete odstrániť položku z HashSetu, mali by ste zavolať metódu Odstrániť. Syntax metódy Remove je uvedená nižšie.

public bool Remove (položka T);

Ak sa položka nachádza v kolekcii, metóda Remove odstráni prvok z HashSet a vráti true pri úspechu, inak false.

Fragment kódu uvedený nižšie ilustruje, ako môžete pomocou metódy Odstrániť položku odstrániť z HashSetu.

položka reťazca = "D";

if (hashSet.Contains (item))

{

hashSet.Remove (položka);

}

Na odstránenie všetkých položiek z HashSetu môžete použiť metódu Vymazať.

Použite operačné metódy sady HashSet v C #

HashSet má množstvo dôležitých metód pre operácie s množinami, ako sú IntersectWith, UnionWith, IsProperSubsetOf, ExceptWith a SymmetricExceptWith.

IsProperSubsetOf

Metóda IsProperSubsetOf sa používa na určenie, či je inštancia HashSet správnou podmnožinou kolekcie. To ilustruje útržok kódu uvedený nižšie.

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

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

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

if (setA.IsProperSubsetOf (setC))

Console.WriteLine ("setC obsahuje všetky prvky setA.");

if (! setA.IsProperSubsetOf (setB))

Console.WriteLine ("setB neobsahuje všetky prvky setA.");

Po vykonaní vyššie uvedeného programu by sa mal v okne konzoly zobraziť nasledujúci výstup.

UnionWith

Na pridanie sady sa používa metóda UnionWith, ako je to znázornené v útržku kódu uvedenom nižšie.

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

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

setA.UnionWith (setB);

foreach (reťazec str v súbore A)

{

Console.WriteLine (str);

}

Po vykonaní vyššie uvedeného kódu sa prvky setB skopírujú do setA. SetA teda teraz bude obsahovať „A“, „B“, „C“, „D“, „E“, „X“ a „Y“.

IntersectWith

Metóda IntersectWith sa používa na reprezentáciu priesečníka dvoch HashSetov. Tu je príklad na pochopenie.

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

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

setA.IntersectWith (setB);

foreach (reťazec str v súbore A)

{

Console.WriteLine (str);

}

Keď spustíte vyššie uvedený program, v okne konzoly sa zobrazia iba prvky spoločné pre tieto dve sady HashSet. Výstup bude vyzerať takto:

Ibaže s

Metóda ExceptWith predstavuje odčítanie matematickej množiny a je operáciou O (n). Predpokladajme, že máte dve sady HashSet setA a setB a zadáte nasledujúce vyhlásenie:

setA.ExceptWith (setB);

To by vrátilo prvky setA, ktoré sa v setB nenachádzajú. Poďme to pochopiť na ďalšom príklade. Zvážte fragment kódu uvedený nižšie.

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

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

setA.ExceptWith (setB);

foreach (reťazec str v súbore A)

{

Console.WriteLine (str);

}

Po vykonaní vyššie uvedeného programu sa prvky „B“, „D“ a „E“ vytlačia v okne konzoly, ako je to znázornené na obrázku 5.

SymmetricExceptWith

Metóda SymmetricExceptWith sa používa na úpravu HashSet tak, aby obsahoval iba jedinečné prvky dvoch HashSetov, t. J. Prvkov, ktoré nie sú spoločné pre obidve HashSety. Zvážte nasledujúci úryvok kódu, ktorý to ilustruje.

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

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

setA.SymmetricExceptWith (setB);

foreach (reťazec str v súbore A)

{

Console.WriteLine (str);

}

Po vykonaní vyššie uvedeného kódu sa v okne konzoly zobrazia iba jedinečné prvky setA a setB - tj. Prvky, ktoré sú prítomné v setA, ale nie v setB, a prvky, ktoré sú prítomné v setB, ale nie v setA. ako je znázornené na obrázku 6.

Zatiaľ čo priemerná zložitosť pre prístup k prvku v poli je O (n), kde n predstavuje počet prvkov v poli, zložitosť je iba O (1) pre prístup k určitému prvku v HashSet. Vďaka tomu je HashSet dobrou voľbou pre rýchle vyhľadávanie a pre vykonávanie nastavených operácií. Zoznam môžete použiť, ak chcete uložiť kolekciu položiek v určitom poradí a prípadne zahrnúť aj duplikáty.

Ako urobiť viac v C #:

  • Ako používať pomenované a voliteľné parametre v C #
  • Ako porovnávať kód C # pomocou BenchmarkDotNet
  • Ako používať plynulé rozhrania a reťazenie metód v C #
  • Ako testovať statické metódy v C #
  • Ako refaktorovať objekty Boha v C #
  • Ako používať ValueTask v C #
  • Ako používať nemennosť v C.
  • Ako používať const, readonly a static v C #
  • Ako používať dátové anotácie v C #
  • Ako pracovať s identifikátormi GUID v C # 8
  • Kedy použiť abstraktné rozhranie vs. rozhranie v C #
  • Ako pracovať s AutoMapperom v C #
  • Ako používať výrazy lambda v C #
  • Ako pracovať s delegátmi Action, Func a Predicate v C #
  • Ako pracovať s delegátmi v C #
  • Ako implementovať jednoduchý záznamník v C #
  • Ako pracovať s atribútmi v C #
  • Ako pracovať s log4net v C #
  • Ako implementovať vzor návrhu úložiska v C #
  • Ako pracovať s odrazom v C #
  • Ako pracovať so súborovým systémom v C #
  • Ako vykonať lenivú inicializáciu v C #
  • Ako pracovať s MSMQ v C #
  • Ako pracovať s metódami rozšírenia v C #
  • Ako na nás výrazy lambda v C #
  • Kedy použiť volatile kľúčové slovo v C #
  • Ako používať kľúčové slovo výťažku v C #
  • Ako implementovať polymorfizmus v C #
  • Ako zostaviť vlastný plánovač úloh v C #
  • Ako pracovať s RabbitMQ v C #
  • Ako pracovať s n-ticí v C #
  • Skúmanie virtuálnych a abstraktných metód v C #
  • Ako používať Dapper ORM v C #
  • Ako používať návrhový vzor mušej váhy v C #
$config[zx-auto] not found$config[zx-overlay] not found