Sobes.tech
Junior

Ի՞նչ է HashSet-ը C#-ում։

sobes.tech AI

Պատասխան AI-ից

HashSet<T> ը ոչ կարգավորված հավաքածու է եզակի տարրերով: Այն հիմնված է հեշ-թերթի վրա և ապահովում է արագ գործողություններ՝ տարրեր ավելացնել, հեռացնել և ստուգել դրանց առկայությունը (միջին հաշվով՝ հաստատուն ժամանակ, O(1)).

HashSet<T>-ի հիմնական հատկանիշները՝

  • Ենթակաություն: Չի կարող պարունակել կրկնօրինակներ: Երբ փորձում եք ավելացնել առկա տարր, գործողությունը անտեսվում է:
  • Ոչ կարգավորվածություն: Տարրերը չեն պահվում որևէ որոշակի կարգով: Իտերացիայի կարգը կարող է տարբեր լինել ավելացման կարգից:
  • Արդյունավետություն: Հեշինգի օգտագործման շնորհիվ որոնման, ավելացման և հեռացման գործողությունները միջինում ունենում են O(1) բարդություն: Վատ հեշ-ֆունկցիայի կամ բախումների դեպքում կարող է նվազել:
  • Բազմաթիվ գործողություններ: Օժտված է միացումների (UnionWith), հատման (IntersectWith), տարբերության (ExceptWith), ենթակազմության կամ գերակազմության ստուգումների (IsSubsetOf, IsSupersetOf) տարբեր գործողություններով:

Օգտագործման օրինակ:

// HashSet ստեղծում
HashSet<string> fruits = new HashSet<string>();

// տարրեր ավելացնել
fruits.Add("խնձոր");
fruits.Add("բանան");
fruits.Add("նարնջի");
fruits.Add("խնձոր"); // Չեղարկվում է, քանի որ "խնձոր" արդեն կա

// տարրի առկայության ստուգում
bool hasBanana = fruits.Contains("բանան"); // true
bool hasGrape = fruits.Contains("գրեյպֆրուտ"); // false

// տարր հեռացնել
fruits.Remove("նարնջի");

// տարրերի անցում
foreach (string fruit in fruits)
{
    // Արտածում՝ խնձոր, բանան (կարգը կարող է տարբեր լինել)
    Console.WriteLine(fruit);
}

// հավաքածուի չափը
int count = fruits.Count; // 2

HashSet<T> իրականացնում է ICollection<T>, IEnumerable<T> և ISet<T> ինտերֆեյսները, ինչը թույլ է տալիս օգտագործել այն տարբեր հավաքածուային սցենարներում և իրականացնել հատուկ հավաքածուային գործողություններ։