Programmēšana

Kā lietot HashSet C #

HashSet ir optimizēta nesakārtotu, unikālu elementu kolekcija, kas nodrošina ātru meklēšanu un augstas veiktspējas kopu darbības. HashSet klase pirmo reizi tika ieviesta .NET 3.5 un ir daļa no System.Collection.Generic vārdu vietas. Šajā rakstā ir runāts par to, kā mēs varam strādāt ar HashSets C #.

Lai strādātu ar šajā rakstā sniegtajiem kodu piemēriem, sistēmā jābūt instalētai Visual Studio 2019. Ja jums vēl nav kopijas, varat lejupielādēt Visual Studio 2019 šeit.

Visual Studio izveidojiet .NET Core konsoles lietojumprogrammas projektu

Vispirms izveidosim .NET Core Console lietojumprogrammas projektu Visual Studio. Pieņemot, ka Visual Studio 2019 ir instalēta jūsu sistēmā, veiciet tālāk norādītās darbības, lai izveidotu jaunu .NET Core Console lietojumprogrammas projektu Visual Studio.

  1. Palaidiet Visual Studio IDE.
  2. Noklikšķiniet uz “Izveidot jaunu projektu”.
  3. Logā “Izveidot jaunu projektu” parādīto veidņu sarakstā atlasiet “Console App (.NET Core)”.
  4. Noklikšķiniet uz Tālāk.
  5. Nākamajā logā “Konfigurēt jauno projektu” norādiet jaunā projekta nosaukumu un vietu.
  6. Noklikšķiniet uz Izveidot.

Tas Visual Studio 2019 izveidos jaunu .NET Core konsoles lietojumprogrammas projektu. Mēs izmantosim šo projektu darbam ar HashSet šī raksta nākamajās sadaļās.

Kas ir HashSet?

HashSet - ko attēlo HashSet klase, kas attiecas uz System.Collections.Generic vārdamvieta - ir augstas veiktspējas, nesakārtota unikālu elementu kolekcija. Tādējādi HashSet netiek kārtots, un tajā nav neviena dublikāta elementa. HashSet arī neatbalsta indeksus - jūs varat izmantot tikai skaitītājus. HashSet parasti izmanto augstas veiktspējas operācijām, kas saistītas ar unikālu datu kopu.

HashSet klase ievieš vairākas saskarnes, kā parādīts zemāk:

publiskā klase 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

Tā kā HashSet satur tikai unikālus elementus, tā iekšējā struktūra ir optimizēta ātrākai meklēšanai. Ņemiet vērā, ka HashSet var saglabāt vienu nulles vērtību. Tātad, HashSet ir laba izvēle, ja vēlaties kolekciju, kas satur unikālus elementus, un kolekcijas elementus var ātri meklēt.

Meklēt vienumu HashSet C #

Lai meklētu vienumu HashSet, varat izmantot metodi Satur, kā parādīts tālāk sniegtajā koda fragmentā:

static void Main (virkne [] args)

        {

HashSet hashSet = jauns HashSet ();

hashSet.Add ("A");

hashSet.Add ("B");

hashSet.Add ("C");

hashSet.Add ("D");

ja (hashSet.Contains ("D"))

Console.WriteLine ("Nepieciešamais elements ir pieejams.");

cits

Console.WriteLine ("Nepieciešamais elements nav pieejams.");

Console.ReadKey ();

        }

HashSet elementi vienmēr ir unikāli

Ja mēģināt ievietot dublikāta elementu HashSet, tas vienkārši tiks ignorēts, bet izpildlaika izņēmumi netiks izmesti. Tālāk parādītais koda fragments to ilustrē.

static void Main (virkne [] args)

{

HashSet hashSet = jauns HashSet ();

hashSet.Add ("A");

hashSet.Add ("B");

hashSet.Add ("C");

hashSet.Add ("D");

hashSet.Add ("D");

Console.WriteLine ("Elementu skaits ir: {0}", hashSet.Count);

Console.ReadKey ();

}

Izpildot programmu, izvade būs tāda, kā parādīts 1. attēlā.

Tagad apsveriet šo koda fragmentu, kas parāda, kā tiek novērsti dublētie elementi:

virkne [] pilsētas = jauna virkne [] {

"Deli",

"Kolkata",

"Ņujorka",

"Londona",

"Tokija",

"Vašingtona",

"Tokija"

            };

HashSet hashSet = jauns HashSet (pilsētas);

foreach (var pilsēta hashSet)

            {

Console.WriteLine (pilsēta);

            }

Izpildot iepriekš minēto programmu, pilsētu nosaukumu dublikāti tiks noņemti.

Noņemt elementus no HashSet C #

Lai noņemtu vienumu no HashSet, jums jāizsauc metode Noņemt. Metodes Noņemt sintakse ir sniegta zemāk.

public bool Noņemt (T vienums);

Ja vienums tiek atrasts kolekcijā, metode Noņemt noņem elementu no HashSet un atgriežas ar true, ja citādi ir nepatiesa.

Tālāk sniegtais koda fragments parāda, kā jūs varat izmantot metodi Noņemt, lai noņemtu vienumu no HashSet.

virknes vienums = "D";

ja (hashSet. Satur (vienums))

{

hashSet.Remove (vienums);

}

Lai noņemtu visus vienumus no HashSet, varat izmantot Notīrīšanas metodi.

Izmantojiet HashSet kopas darbības metodes C #

HashSet ir vairākas svarīgas metodes kopu darbībām, piemēram, IntersectWith, UnionWith, IsProperSubsetOf, ExceptWith un SymmetricExceptWith.

IsProperSubsetOf

Metode IsProperSubsetOf tiek izmantota, lai noteiktu, vai HashSet eksemplārs ir pareiza kolekcijas apakškopa. Tas ir parādīts tālāk sniegtajā koda fragmentā.

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

ja (setA.IsProperSubsetOf (setC))

Console.WriteLine ("setC satur visus setA elementus.");

ja (! setA.IsProperSubsetOf (setB))

Console.WriteLine ("setB nesatur visus setA elementus.");

Izpildot iepriekš minēto programmu, konsoles logā vajadzētu redzēt šādu izvadi.

Savienība ar

UnionWith metodi izmanto kopu pievienošanai, kā parādīts tālāk sniegtajā koda fragmentā.

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

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

setA.UnionWith (setB);

foreach (virkne str setA)

{

Console.WriteLine (str);

}

Izpildot iepriekš minēto koda daļu, setB elementi tiek kopēti setA. Tātad setA tagad ietvers "A", "B", "C", "D", "E", "X" un "Y".

Krustojas ar

Metode IntersectWith tiek izmantota, lai attēlotu divu HashSets krustojumu. Šeit ir piemērs, kā to saprast.

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

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

setA.IntersectWith (setB);

foreach (virkne str setA)

{

Console.WriteLine (str);

}

Palaižot iepriekš minēto programmu, konsoles logā tiks parādīti tikai abiem HashSets kopīgie elementi. Rezultāts izskatīsies šādi:

Izņemot Ar

Metode ExceptWith attēlo matemātisko kopu atņemšanu un ir O (n) darbība. Pieņemsim, ka jums ir divi HashSets setA un setB, un jūs norādāt šādu paziņojumu:

setA.ExceptWith (setB);

Tas atgriezīs setA elementus, kuru nav setB. Sapratīsim to ar citu piemēru. Apsveriet tālāk sniegto koda fragmentu.

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

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

setA.ExceptWith (setB);

foreach (virkne str setA)

{

Console.WriteLine (str);

}

Izpildot iepriekš minēto programmu, konsoles logā tiks izdrukāti elementi "B", "D" un "E", kā parādīts 5. attēlā.

SymmetricExceptWith

SymmetricExceptWith metodi izmanto, lai modificētu HashSet, lai tajā būtu tikai divu HashSets unikālie elementi, t.i., elementi, kas nav kopīgi abiem HashSets. Apsveriet šo koda fragmentu, kas to ilustrē.

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

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

setA.SymmetricExceptWith (setB);

foreach (virkne str setA)

{

Console.WriteLine (str);

}

Izpildot iepriekš minēto kodu, konsoles logā tiks parādīti tikai unikālie setA un setB elementi, ti, elementi, kas atrodas setA, bet nav setB, un elementi, kas atrodas setB, bet nav setA kā parādīts 6. attēlā.

Kaut arī vidējā sarežģītība piekļuvei masīva elementam ir O (n), kur n apzīmē elementu skaitu masīvā, sarežģītība ir tikai O (1), lai piekļūtu noteiktam HashSet elementam. Tas padara HashSet par labu izvēli ātrai meklēšanai un noteiktu darbību veikšanai. Sarakstu varat izmantot, ja vēlaties uzglabāt priekšmetu kolekciju noteiktā secībā un, iespējams, iekļaut arī dublikātus.

Kā izdarīt vairāk C #:

  • Kā izmantot nosauktos un izvēles parametrus C #
  • Kā salīdzināt C # kodu, izmantojot BenchmarkDotNet
  • Kā izmantot tekošas saskarnes un metodes saistīt ar C #
  • Kā testēt statiskās metodes C #
  • Kā pārveidot Dieva objektus C #
  • Kā izmantot ValueTask C #
  • Kā izmantot nemainīgumu C
  • Kā lietot const, tikai lasāmu un statisku C #
  • Kā izmantot datu anotācijas C #
  • Kā strādāt ar GUID C # 8
  • Kad izmantot abstraktu klasi un saskarni C #
  • Kā strādāt ar AutoMapper C #
  • Kā lietot lambda izteicienus C #
  • Kā strādāt ar Action, Func un Predicate delegātiem C #
  • Kā strādāt ar delegātiem C #
  • Kā ieviest vienkāršu reģistrētāju C #
  • Kā strādāt ar atribūtiem C #
  • Kā strādāt ar log4net C #
  • Kā ieviest krātuves dizaina modeli C #
  • Kā strādāt ar refleksiju C #
  • Kā strādāt ar filesystemwatcher C #
  • Kā veikt slinku inicializāciju C #
  • Kā strādāt ar MSMQ C #
  • Kā strādāt ar paplašināšanas metodēm C #
  • Kā mums izteikt lambda izteicienus C #
  • Kad lietot svārstīgo atslēgvārdu C #
  • Kā izmantot ienesīguma atslēgvārdu C #
  • Kā ieviest polimorfismu C #
  • Kā izveidot savu uzdevumu plānotāju C #
  • Kā strādāt ar RabbitMQ C #
  • Kā strādāt ar dubultošanos C #
  • Virtuālu un abstraktu metožu izpēte C #
  • Kā lietot Dapper ORM C #
  • Kā izmantot lidojošā dizaina rakstu C #
$config[zx-auto] not found$config[zx-overlay] not found