Sobes.tech
Junior

C# да HashSet эмне?

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> интерфейстерин ишке ашырат, бул аны ар кандай жыйнактар сценарийлеринде колдонууга жана өзгөчө жыйнактар операцияларын жүргүзүүгө мүмкүндүк берет.