C# kollektsioonide õpetus koos näidetega

⚡ Nutikas kokkuvõte

C# kollektsioonid pakuvad paindlikku viisi objektirühmade salvestamiseks ja haldamiseks. Erinevalt massiividest kasvavad ja kahanevad kollektsioonid käitusajal ning nimeruumid System.Collections ja System.Collections.Generic pakuvad valmistüüpe loendite, sõnastike, pinude ja järjekordade jaoks.

  • 🔃 Dünaamiline suuruse muutmine: Kollektsioonid lisavad ja eemaldavad elemente käitusajal, seega ei saa nende suurust eelnevalt kindlaks määrata nagu massiivi puhul.
  • 📚 Nimeruumid: System.Collections hoiab mitte-üldiseid tüüpe, samas kui System.Collections.Generic hoiab tüübikindlaid üldtüüpe.
  • 🧱 Põhiklassid: ArrayList, Stack, Queue, Hashtable, SortedList ja BitArray katavad tavalised mitte-üldised vajadused.
  • Üldine võimsus: List, Dictionary, HashSet ja Queue lisavad kompileerimise ajal tüübiturvalisust ja paremat jõudlust.
  • 🔑 Õige valik: Kasutage võtmeotsingu jaoks sõnastikku, järjestatud esemete jaoks loendit ja LIFO või FIFO järjekorra jaoks virna või järjekorda.
  • 🤖 AI abi: GitHub Copiloti tugistruktuuride kogumiskood ja ML.NET-i torujuhtmed edastavad andmeid üldiste kogumistüüpide kaudu.

Kollektsioonid C#-s

Eelmises õpetuses õppisime massiive kasutama C#-s. Teeme sellest kiire ülevaate, programmeerimises kasutatakse massiive seotud objektide komplekti grupeerimiseks. Seega võiks luua massiivi või täisarvude komplekti, millele pääseb juurde ühe muutuja nime kaudu.

Mis on kogud C#-s?

Kollektsioonid on sarnased Massiraadid, pakub see paindlikumat viisi objektide rühmaga töötamiseks.

Massiivides oleksite märganud, et peate eelnevalt määratlema massiivi elementide arvu. Seda tuli teha massiivi deklareerimisel.

Kuid kollektsioonis ei pea te kollektsiooni suurust eelnevalt määratlema. Saate elemente lisada või isegi elemente kogust igal ajal eemaldada. See peatükk keskendub sellele, kuidas saame töötada erinevate C#-s saadaolevate kogudega.

System.Collections klassid

.NET Framework koondab algsed mitte-üldised kollektsiooniklassid System.Collections nimeruumi. Allolev tabel võtab kokku peamised tüübid, mida saate kohe kasutada.

kogumine Kirjeldus
ArrayList ArrayListi kollektsioon on sarnane massiividega andmetüüp C# keeles. Suurim erinevus on massiiviloendikogu dünaamiline olemus.
Stack Stack on eriline korpuste kogum, mis esindab viimasena sisse, esimesena välja (LIFO) kontseptsiooni.
järjekorrad „Järjekord“ on eriline kollektsioon, mis esindab põhimõtte „kes ees sisse, see ees välja“ põhimõtteid.
Hashtable Räsitabel on spetsiaalne kogum, mida kasutatakse võtme-väärtuse üksuste salvestamiseks.
Sorteeritud loend SortedList on kollektsioon, mis salvestab vaikimisi võtme-väärtuste paarid võtme kasvavas järjekorras.
BitArray Bitimassiiv on andmestruktuuri massiiv, mis salvestab bitte.

Üldised kollektsioonid C#-s

Ülaltoodud mitteüldised klassid salvestavad iga elemendi üldise objektina, mis tähendab, et kompilaator ei saa tüüpi kontrollida ja programm maksab väärtuste karpide eest väikese tasu. Selle lahendamiseks lisas C# nimeruumi System.Collections.Generic, kus iga kollektsioon on seotud ühe deklareeritud tüübiga.

Üldine kogumik, näiteks List aktsepteerib ainult stringe, seega vead tabatakse kompileerimise ajal ja elemendi tagasilugemisel pole vaja teisendust (code casting). See muudab üldised kollektsioonid turvalisemaks, kiiremaks ja hõlpsamini loetavaks, mistõttu on need tänapäevases C# koodis vaikevalik.

Kõige levinumad geneerilised kollektsioonid on loetletud allpool:

  • Loend : Suuruselt muudetav, indeksipõhine loend, ArrayListi üldine asendaja.
  • Sõnaraamat : Salvestab võtme-väärtuse paare kiirete, räsipõhiste otsingutega.
  • Räsikomplekt : Hoiab ainult unikaalseid väärtusi ja toetab hulgaoperatsioone, näiteks liitmist.
  • Järjekord : Esimesena sisse, esimesena välja kollektsioon, Queue'i geneeriline versioon.
  • Stack : Viimane sisse, esimene välja kollektsioon, Stacki geneeriline versioon.
  • Sorteeritud loend : Hoiab võtme-väärtuse paare võtme järgi kasvavas järjekorras sorteerituna.

C# loendikogu näide

List on kõige laialdasemalt kasutatav üldine kogum, kuna see käitub nagu dünaamiline massiiv. Allolev näide loob stringide loendi, lisab ja eemaldab elemente, loeb selle suuruse ja seejärel prindib ülejäänud väärtused. Kogu kood on kirjutatud faili Program.cs.

Step 1) Impordi nimeruum System.Collections.Generic ja deklareeri stringide loend.

Step 2) Lisa üksusi meetodiga „Lisa“ ja kustuta üks meetodiga „Eemalda“.

Step 3) Loe Count omadust ja seejärel käi foreach-lausega loendis tsükkel läbi.

using System;
using System.Collections.Generic;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   List<string> tutorials = new List<string>();
   tutorials.Add("Java");
   tutorials.Add("Python");
   tutorials.Add("Kotlin");
   tutorials.Remove("Python");
   Console.WriteLine(tutorials.Count);
   foreach (string tutorial in tutorials)
   {
    Console.WriteLine(tutorial);
   }
   Console.ReadKey();
  }
 }
}

Code Selgitus:-

  1. Nimeruum System.Collections.Generic imporditakse, et programmile oleks saadaval tüüp List.
  2. Uus nimekiri Luuakse fail nimega tutorials ja meetodi Add abil lisatakse kolm nime.
  3. Eemaldamismeetod kustutab väärtuse „Python”, mis jätab nimekirja kaks üksust.
  4. Omadus Count tagastab üksuste arvu ja foreach tsükkel prindib kõik ülejäänud väärtused järjekorras.

Programmi käivitamisel prindib see kõigepealt välja arvu 2, millele järgneb Java ja Kotlin eraldi ridadel. See näitab, kuidas kollektsiooni suurus käitusajal muutub, mida fikseeritud massiiv teha ei saa.

Erinevus massiivide ja kollektsioonide vahel C#-s

Mõlemad an massiivi ja kogum koondab seotud üksused ühe nime alla, kuid programmi käivitamisel käituvad nad erinevalt. Teadmine, millal igaüht kasutada, aitab teil kirjutada puhtamat ja tõhusamat koodi.

Peamised erinevused on loetletud allpool:

  • Suurus: Massiivil on deklareerimisel määratud fikseeritud pikkus, samas kui kollektsioon võib igal ajal kasvada või kahaneda.
  • Tüübi käsitlemine: Massiiv salvestab ühte tüüpi, samas kui kollektsioon võib olla tüübikindel geneeriliste tüüpidega või sisaldada segatüüpi objekte, kui see pole geneeriline.
  • Asukoht: Massiivid on keelde sisse ehitatud, samas kui kollektsiooniklassid asuvad nimeruumides System.Collections ja System.Collections.Generic.
  • Sisseehitatud toimingud: Kollektsioonid pakuvad valmis meetodeid üksuste lisamiseks, eemaldamiseks, otsimiseks ja sortimiseks, samas kui massiivid pakuvad ainult põhilist indekseeritud juurdepääsu.
  • Parim kasutamine: Valige massiiv, kui elementide arv on teada ja fikseeritud, ning kogum, kui arv programmi töötamise ajal muutub.

Lühidalt, massiivid sobivad kõige paremini fikseeritud suurusega andmete jaoks, samas kui kollektsioonid pakuvad paindlikkust, mida enamik reaalse maailma rakendusi vajab.

KKK

Kasutage sõnastikku, kui vajate kiireid otsinguid unikaalse võtme, näiteks kirjega seotud ID, abil. See leiab väärtused peaaegu konstantse aja jooksul, samas kui loend peab üksusi ükshaaval läbi vaatama.

HashSet ja Dictionary pakuvad kiireimaid otsinguid, kuna nad kasutavad elemendi leidmiseks peaaegu konstantse ajaga räsimist. List või massiiv on aeglasem, kuna see võib vajada iga elemendi järjestikust kontrollimist.

Samaaegsed kollektsioonid asuvad nimeruumis System.Collections.Concurrent ja on loodud mitmelõimelise koodi jaoks. Tüübid nagu ConcurrentDictionary ja BlockingCollection võimaldavad mitmel lõimel üksusi turvaliselt lisada ja eemaldada ilma käsitsi lukustamiseta.

IEnumerable on baasliides, mis toetab ainult foreach-tsükliga üksuste lugemist. ICollection laiendab seda ja lisab liikmeid nagu Count, Add ja Remove, seega toetab see ka kollektsiooni muutmist.

List on üldine, tüübikindel kogum, mis salvestab ühe deklareeritud tüübi, pakkudes kompileerimise ajal kontrolli ja paremat jõudlust. ArrayList on mitteüldine ja salvestab iga elemendi objektina, mis vajab teisendamist ja lubab segatüüpe.

Stack (virn) töötab viimasena sisse, esimesena välja järjekorras, seega eemaldatakse esimesena uusim üksus, kasutades funktsiooni Pop. Queue (järjekord) töötab esimesena sisse, esimesena välja järjekorras, seega eemaldatakse esimesena vanim üksus, kasutades funktsiooni Dequeue.

Jah. GitHub Copilot oskab soovitada õiget kollektsioonitüüpi, genereerida tsükleid, mis lisavad või filtreerivad üksusi, ja teha lühikese kommentaari põhjal LINQ-päringuid, mis kiirendab tööd loendite, sõnastike ja muude kollektsioonidega.

ML.NET edastab treeningandmeid selliste kogumite kaudu nagu List ja IEnumerable, mis on seotud selle IDataView torujuhtmega. Näidiste salvestamine tugevalt tüübitud üldises kogumis hoiab masinõppe töövoo selge ja tüübikindla.

Võta see postitus kokku järgmiselt: