Programmering

Hvordan bruke HashSet i C #

Et HashSet er en optimalisert samling av uordnede, unike elementer som gir raske oppslag og høy ytelse. HashSet-klassen ble først introdusert i .NET 3.5 og er en del av System.Collection.Generic namespace. Denne artikkelen snakker om hvordan vi kan jobbe med HashSets i C #.

For å jobbe med kodeeksemplene som er gitt i denne artikkelen, bør du ha Visual Studio 2019 installert på systemet ditt. Hvis du ikke allerede har en kopi, kan du laste ned Visual Studio 2019 her.

Opprett et .NET Core-konsollapplikasjonsprosjekt i Visual Studio

Først og fremst, la oss lage et .NET Core Console Application-prosjekt i Visual Studio. Forutsatt at Visual Studio 2019 er installert i systemet ditt, følger du trinnene som er beskrevet nedenfor for å opprette et nytt .NET Core Console Application-prosjekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klikk på "Opprett nytt prosjekt."
  3. I vinduet "Opprett nytt prosjekt" velger du "Konsollapp (.NET Core)" fra listen over maler som vises.
  4. Klikk på Neste.
  5. I vinduet “Konfigurer ditt nye prosjekt” som vises, angir du navnet og stedet for det nye prosjektet.
  6. Klikk på Opprett.

Dette vil opprette et nytt .NET Core-konsollapplikasjonsprosjekt i Visual Studio 2019. Vi bruker dette prosjektet til å jobbe med HashSet i de påfølgende delene av denne artikkelen.

Hva er et HashSet?

Et HashSet - representert av HashSet-klassen knyttet til System.Collections.Generic namespace - er en høyytelses, uordnet samling av unike elementer. Derfor blir et HashSet ikke sortert og inneholder ikke dupliserte elementer. Et HashSet støtter heller ikke indekser - du kan bare bruke teller. Et HashSet brukes vanligvis til operasjoner med høy ytelse som involverer et sett med unike data.

HashSet-klassen implementerer flere grensesnitt som vist nedenfor:

offentlig klasse 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

Siden HashSet bare inneholder unike elementer, er den interne strukturen optimalisert for raskere søk. Merk at du kan lagre en enkelt nullverdi i et HashSet. Så, HashSet er et godt valg når du vil ha en samling som inneholder unike elementer, og elementene i samlingen kan søkes raskt.

Søk etter et element i et HashSet i C #

For å søke i et element i et HashSet kan du bruke Inneholder-metoden som vist i kodebiten gitt nedenfor:

statisk tomrom Main (streng [] args)

        {

HashSet hashSet = ny HashSet ();

hashSet.Add ("A");

hashSet.Add ("B");

hashSet.Add ("C");

hashSet.Add ("D");

hvis (hashSet.Contains ("D"))

Console.WriteLine ("Det nødvendige elementet er tilgjengelig.");

ellers

Console.WriteLine ("Det nødvendige elementet er ikke tilgjengelig.");

Console.ReadKey ();

        }

HashSet-elementer er alltid unike

Hvis du prøver å sette inn et duplikatelement i et HashSet, vil det ganske enkelt bli ignorert, men ingen unntak for kjøretid blir kastet. Følgende kodebit illustrerer dette.

statisk tomrom Main (streng [] args)

{

HashSet hashSet = ny HashSet ();

hashSet.Add ("A");

hashSet.Add ("B");

hashSet.Add ("C");

hashSet.Add ("D");

hashSet.Add ("D");

Console.WriteLine ("Antall elementer er: {0}", hashSet.Count);

Console.ReadKey ();

}

Når du kjører programmet, vil utgangen være som vist i figur 1.

Vurder nå følgende kodebit som illustrerer hvordan dupliserte elementer elimineres:

streng [] byer = ny streng [] {

"Delhi",

"Kolkata",

"New York",

"London",

"Tokyo",

"Washington",

"Tokyo"

            };

HashSet hashSet = nye HashSet (byer);

foreach (var by i hashSet)

            {

Console.WriteLine (by);

            }

Når du kjører programmet ovenfor, vil de dupliserte bynavnene bli fjernet.

Fjern elementer fra et HashSet i C #

For å fjerne et element fra et HashSet, bør du ringe Fjern-metoden. Syntaksen for Fjern-metoden er gitt nedenfor.

offentlig bool Fjern (T-element);

Hvis elementet finnes i samlingen, fjerner Fjern-metoden et element fra HashSet og returnerer sant når det lykkes, ellers falskt.

Kodebiten gitt nedenfor illustrerer hvordan du kan bruke Fjern-metoden til å fjerne et element fra et HashSet.

streng element = "D";

if (hashSet.Contains (element))

{

hashSet.Remove (element);

}

For å fjerne alle elementene fra et HashSet kan du bruke Clear-metoden.

Bruk HashSet sett operasjonsmetoder i C #

HashSet har en rekke viktige metoder for å angi operasjoner som IntersectWith, UnionWith, IsProperSubsetOf, ExceptWith og SymmetricExceptWith.

IsProperSubsetOf

IsProperSubsetOf-metoden brukes til å bestemme om en HashSet-forekomst er en riktig delmengde av en samling. Dette er illustrert i kodebiten gitt nedenfor.

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

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

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

hvis (setA.IsProperSubsetOf (setC))

Console.WriteLine ("setC inneholder alle elementene i setA.");

hvis (! setA.IsProperSubsetOf (setB))

Console.WriteLine ("setB inneholder ikke alle elementene i setA.");

Når du kjører programmet ovenfor, bør du se følgende utdata i konsollvinduet.

UnionWith

UnionWith-metoden brukes til å sette tillegg som illustrert i kodebiten gitt nedenfor.

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

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

setA.UnionWith (setB);

foreach (strengstr i settA)

{

Console.WriteLine (str);

}

Når du utfører kodestykket ovenfor, blir elementene i setB kopiert til setA. Så setA vil nå inkludere "A", "B", "C", "D", "E", "X" og "Y".

Kryss med

IntersectWith-metoden brukes til å representere skjæringspunktet mellom to HashSets. Her er et eksempel for å forstå dette.

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

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

setA.IntersectWith (setB);

foreach (strengstr i settA)

{

Console.WriteLine (str);

}

Når du kjører programmet ovenfor, vil bare elementene som er felles for de to HashSets, vises i konsollvinduet. Utgangen vil se slik ut:

Unntatt med

ExceptWith-metoden representerer matematisk sett subtraksjon og er en O (n) operasjon. Anta at du har to HashSets settA og settB, og du angir følgende utsagn:

setA.ExceptWith (setB);

Dette vil returnere elementene i settA som ikke er tilstede i settB. La oss forstå dette med et annet eksempel. Tenk på kodebiten gitt nedenfor.

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

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

setA.ExceptWith (setB);

foreach (strengstr i settA)

{

Console.WriteLine (str);

}

Når du kjører programmet ovenfor, vil elementene "B", "D" og "E" skrives ut ved konsollvinduet som vist i figur 5.

SymmetricExceptWith

SymmetricExceptWith-metoden brukes til å modifisere et HashSet slik at det bare inneholder de unike elementene i to HashSets, dvs. elementene som ikke er felles for begge HashSets. Tenk på følgende kodebit som illustrerer dette.

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

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

setA.SymmetricExceptWith (setB);

foreach (strengstr i settA)

{

Console.WriteLine (str);

}

Når du utfører koden ovenfor, vises bare de unike elementene i setA og setB - dvs. elementene som er tilstede i setA men ikke i setB, og elementene som er tilstede i setB men ikke i setA - i konsollvinduet som vist i figur 6.

Mens den gjennomsnittlige kompleksiteten for tilgang til et element i en matrise er O (n), hvor n representerer antall elementer i matrisen, er kompleksiteten bare O (1) for tilgang til et bestemt element i et HashSet. Dette gjør HashSet til et godt valg for raske søk og for å utføre settoperasjoner. Du kan bruke en liste hvis du vil lagre en samling varer i en bestemt rekkefølge, og kanskje også inkludere duplikater.

Hvordan gjøre mer i C #:

  • Hvordan bruke navngitte og valgfrie parametere i C #
  • Slik benchmarker du C # -kode ved hjelp av BenchmarkDotNet
  • Hvordan bruke flytende grensesnitt og metodekjetting i C #
  • Hvordan enhetstest statiske metoder i C #
  • Hvordan refaktorere Guds objekter i C #
  • Hvordan bruke ValueTask i C #
  • Hvordan bruke uforanderlighet i C
  • Slik bruker du const, readonly og static i C #
  • Slik bruker du datanoteringer i C #
  • Hvordan jobbe med GUIDer i C # 8
  • Når skal jeg bruke en abstrakt klasse vs. grensesnitt i C #
  • Hvordan jobbe med AutoMapper i C #
  • Hvordan bruke lambdauttrykk i C #
  • Hvordan jobbe med Action-, Func- og Predicate-delegater i C #
  • Hvordan jobbe med delegater i C #
  • Slik implementerer du en enkel logger i C #
  • Hvordan jobbe med attributter i C #
  • Hvordan jobbe med log4net i C #
  • Slik implementerer du mønsteret for depotdesign i C #
  • Hvordan jobbe med refleksjon i C #
  • Hvordan jobbe med filsystemwatcher i C #
  • Hvordan utføre lat initialisering i C #
  • Hvordan jobbe med MSMQ i C #
  • Hvordan jobbe med utvidelsesmetoder i C #
  • Hvordan vi lambdauttrykk i C #
  • Når skal du bruke det flyktige nøkkelordet i C #
  • Slik bruker du avkastningsnøkkelordet i C #
  • Hvordan implementere polymorfisme i C #
  • Hvordan lage din egen oppgaveplanlegger i C #
  • Hvordan jobbe med RabbitMQ i C #
  • Hvordan jobbe med en tuple i C #
  • Utforske virtuelle og abstrakte metoder i C #
  • Hvordan bruke Dapper ORM i C #
  • Hvordan bruke flyvevekt mønster i C #
$config[zx-auto] not found$config[zx-overlay] not found