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> ხილი = new HashSet<string>();

// ელემენტების დამატება
ხილი.Add("ვაშლი");
ხილი.Add("ბანანი");
ხილი.Add("ნარინჯი");
ხილი.Add("ვაშლი"); // იგნორირებულია, რადგან "ვაშლი" უკვე არსებობს

// ელემენტის არსებობის შემოწმება
bool აქვსბანანი = ხილი.Contains("ბანანი"); // true
bool აქვსგრეიპი = ხილი.Contains("გრეიპი");   // false

// ელემენტის წაშლა
ხილი.Remove("ნარინჯი");

// ელემენტების გადათვლა
foreach (string ხილი in ხილი)
{
    // გამოტანა: ვაშლი, ბანანი (შესაძლებელია წესის ცვლილება)
    Console.WriteLine(ხილი);
}

// კოლექციის ზომა
int რაოდენობა = ხილი.Count; // 2

HashSet<T> ახდენს ICollection<T>, IEnumerable<T> და ISet<T> ინტერფეისების რეალიზაციას, რაც საშუალებას აძლევს გამოიყენოს იგი სხვადასხვა კოლექციის სცენარებში და განახორციელოს უნიკალური ოპერაციები.