C# Collections opetusohjelma esimerkkeineen

โšก ร„lykรคs yhteenveto

C#-kielen kokoelmat tarjoavat joustavan tavan tallentaa ja hallita objektiryhmiรค. Toisin kuin taulukot, kokoelmat kasvavat ja kutistuvat suorituksen aikana, ja System.Collections- ja System.Collections.Generic-nimiavaruudet tarjoavat valmiita tyyppejรค listoille, sanakirjoille, pinoille ja jonoille.

  • ๐Ÿ”ƒ Dynaaminen koko: Kokoelmat lisรครคvรคt ja poistavat elementtejรค ajonaikana, joten niiden kokoa ei voi mรครคrittรครค etukรคteen kuten taulukon tapauksessa.
  • ๐Ÿ“š Nimiavaruudet: System.Collections sisรคltรครค ei-yleiset tyypit, kun taas System.Collections.Generic sisรคltรครค tyyppivarmat yleiset tyypit.
  • ๐Ÿงฑ Ydinluokat: ArrayList, Stack, Queue, Hashtable, SortedList ja BitArray kattavat yleisimmรคt ei-yleiset tarpeet.
  • โœ… Yleinen teho: List, Dictionary, HashSet ja Queue lisรครคvรคt kรครคnnรถsaikaista tyyppiturvallisuutta ja parantavat suorituskykyรค.
  • ๐Ÿ”‘ Oikea valinta: Kรคytรค sanakirjaa avainhauille, listaa tilatuille nimikkeille ja pinoa tai jonoa LIFO- tai FIFO-jรคrjestykselle.
  • ๐Ÿค– AI-apu: GitHub Copilot tukee kokoelmakoodia ja ML.NET-putket vรคlittรคvรคt dataa yleisten kokoelmatyyppien kautta.

Kokoelmat C#:lla

Edellisessรค opetusohjelmassamme olemme oppineet kuinka voimme kรคyttรครค taulukoita C#:ssa. Otetaanpa nopea yleiskatsaus siihen, ohjelmoinnin taulukoita kรคytetรครคn ryhmittelemรครคn toisiinsa liittyviรค objekteja. Voidaan siis luoda taulukko tai joukko kokonaislukuja, joihin pรครคsee yhden muuttujan nimen kautta.

Mikรค on kokoelmat C#:ssa?

Kokoelmat ovat samanlaisia taulukot, se tarjoaa joustavamman tavan tyรถskennellรค objektiryhmรคn kanssa.

Tauluissa olisit huomannut, ettรค sinun on mรครคritettรคvรค taulukon elementtien mรครคrรค etukรคteen. Tรคmรค oli tehtรคvรค, kun taulukko oli ilmoitettu.

Mutta kokoelmassa sinun ei tarvitse mรครคrittรครค kokoelman kokoa etukรคteen. Voit lisรคtรค elementtejรค tai jopa poistaa elementtejรค kokoelmasta milloin tahansa. Tรคmรค luku keskittyy siihen, kuinka voimme tyรถskennellรค C#:ssa saatavilla olevien eri kokoelmien kanssa.

System.Collections -luokat

.NET Framework ryhmittelee alkuperรคiset ei-yleiset kokoelmaluokat System.Collections-nimiavaruuteen. Alla oleva taulukko yhteenvetรครค tรคrkeimmรคt tyypit, joita voit kรคyttรครค heti.

Kokoelma Tuotetiedot
ArrayList ArrayList-kokoelma on samanlainen kuin Arrays tietotyyppi C#. Suurin ero on taulukkoluettelokokoelman dynaaminen luonne.
Pinota Pino on erikoistapauskokoelma, joka edustaa viimeisenรค sisรครคn, ensin ulos (LIFO) -konseptia.
jonot The Queue on erikoismallisto, joka edustaa "first in first out" -konseptia.
Hashtable Hajautustaulukko on erityinen kokoelma, jota kรคytetรครคn avain-arvo-kohteiden tallentamiseen.
Lajiteltu lista SortedList on kokoelma, joka tallentaa avainarvoparit avaimen nousevassa jรคrjestyksessรค oletuksena.
BitArray Bittitaulukko on tietorakenteen joukko, joka tallentaa bittejรค.

Yleiset kokoelmat C#:ssa

Yllรค olevat ei-geneeriset luokat tallentavat jokaisen elementin yleisenรค oliona, mikรค tarkoittaa, ettรค kรครคntรคjรค ei voi tarkistaa tyyppiรค ja ohjelma maksaa pienen kustannuksen laatikointiarvoista. Ratkaistakseen tรคmรคn C# lisรคsi System.Collections.Generic-nimiavaruuden, jossa jokainen kokoelma on sidottu yhteen ilmoitettuun tyyppiin.

Yleinen kokoelma, kuten List hyvรคksyy vain merkkijonoja, joten virheet havaitaan kรครคnnรถsaikana eikรค tyyppimuunnoksia tarvita, kun luet alkion takaisin. Tรคmรค tekee geneerisistรค kokoelmista turvallisempia, nopeampia ja helpompia lukea, minkรค vuoksi ne ovat oletusvalinta modernissa C#-koodissa.

Yleisimmรคt geneeriset kokoelmat on lueteltu alla:

  • Lista : Muokattavan kokoinen, indeksipohjainen lista, ArrayListin yleinen korvaaja.
  • Sanakirja : Tallentaa avain-arvo-pareja nopeilla, hajautuspohjaisilla hauilla.
  • Hajautusjoukko : Sisรคltรครค vain yksilรถllisiรค arvoja ja tukee joukko-operaatioita, kuten yhdistรคmistรค.
  • Jonottaa : Ensimmรคisenรค sisรครคn, ensin ulos -kokoelma, Queuen geneerinen versio.
  • Pino : Viimeisenรค sisรครคn, ensin ulos -kokoelma, Stackin geneerinen versio.
  • Lajiteltu lista : Pitรครค avain-arvo-parit lajiteltuina avaimen mukaan nousevassa jรคrjestyksessรค.

C#-listakokoelman esimerkki

Lista on yleisimmin kรคytetty geneerinen kokoelma, koska se kรคyttรคytyy kuin dynaaminen taulukko. Alla oleva esimerkki luo merkkijonoluettelon, lisรครค ja poistaa kohteita, lukee sen koon ja tulostaa loput arvot. Kaikki koodi on kirjoitettu Program.cs-tiedostoon.

Vaihe 1) Tuo System.Collections.Generic-nimiavaruus ja mรครคrittele merkkijonoluettelo.

Vaihe 2) Lisรครค kohteita Lisรครค-metodilla ja poista yksi Poista-metodilla.

Vaihe 3) Lue Count-ominaisuus ja kรคy sitten lista lรคpi foreach-lauseella.

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 Selitys:-

  1. System.Collections.Generic-nimiavaruus tuodaan, jotta List-tyyppi on ohjelman kรคytettรคvissรค.
  2. Uusi lista nimeltรครคn tutorials luodaan ja kolme nimeรค lisรคtรครคn Add-metodilla.
  3. Remove-metodi poistaa arvon โ€œPythonโ€, mikรค jรคttรครค luetteloon kaksi kohtaa.
  4. Count-ominaisuus palauttaa alkioiden lukumรครคrรคn ja foreach-silmukka tulostaa jรคljellรค olevat arvot jรคrjestyksessรค.

Kun ohjelma suoritetaan, se ensin tulostaa lukumรครคrรคn 2, jonka jรคlkeen Java ja Kotlin erillisillรค riveillรค. Tรคmรค nรคyttรครค, miten kokoelman koko muuttuu suorituksen aikana, mitรค kiinteรค taulukko ei voi tehdรค.

Ero taulukoiden ja kokoelmien vรคlillรค C#:ssa

Molemmat an ryhmรค ja kokoelma ryhmittelee toisiinsa liittyviรค kohteita yhden nimen alle, mutta ne toimivat eri tavalla ohjelman suorituksen aikana. Kun tiedรคt, milloin kutakin kรคytetรครคn, voit kirjoittaa selkeรคmpรครค ja tehokkaampaa koodia.

Tรคrkeimmรคt erot on lueteltu alla:

  • Koko: Taulukolla on kiinteรค pituus, joka asetetaan mรครคrittelyn yhteydessรค, kun taas kokoelma voi kasvaa tai kutistua milloin tahansa.
  • Tyypin kรคsittely: Taulukko tallentaa yhden tyypin, kun taas kokoelma voi olla tyyppiturvallinen geneeristen tyyppien kanssa tai sisรคltรครค sekatyyppisiรค objekteja, kun se ei ole geneerinen.
  • Sijainti: Taulukot on sisรครคnrakennettu kieleen, kun taas kokoelmaluokat sijaitsevat System.Collections- ja System.Collections.Generic-nimiavaruuksissa.
  • Sisรครคnrakennetut toiminnot: Kokoelmat tarjoavat valmiita metodeja kohteiden lisรครคmiseen, poistamiseen, hakemiseen ja lajitteluun, kun taas taulukot tarjoavat vain perusindeksoidun pรครคsyn.
  • Paras kรคyttรถ: Valitse taulukko, kun alkioiden lukumรครคrรค on tunnettu ja kiinteรค, ja kokoelma, kun lukumรครคrรค muuttuu ohjelman suorituksen aikana.

Lyhyesti sanottuna taulukot sopivat parhaiten kiinteรคn kokoiselle datalle, kun taas kokoelmat tarjoavat joustavuutta, jota useimmat reaalimaailman sovellukset tarvitsevat.

UKK

Kรคytรค sanakirjaa, kun tarvitset nopeita hakuja yksilรถllisen avaimen, kuten tietueeseen yhdistetyn tunnuksen, avulla. Se lรถytรครค arvot lรคhes vakioajassa, kun taas luettelon on selattava alkioita yksi kerrallaan.

HashSet ja Dictionary tarjoavat nopeimmat haut, koska ne kรคyttรคvรคt hajautusta elementin lรถytรคmiseen lรคhes vakioajassa. Lista tai taulukko on hitaampi, koska sen on ehkรค tarkistettava jokainen elementti perรคkkรคin.

Samanaikaiset kokoelmat sijaitsevat System.Collections.Concurrent-nimiavaruudessa ja ne on rakennettu monisรคikeistรค koodia varten. Tyypit, kuten ConcurrentDictionary ja BlockingCollection, mahdollistavat useiden sรคikeiden lisรคtรค ja poistaa kohteita turvallisesti ilman manuaalisia lukituksia.

IEnumerable on perusrajapinta, joka tukee vain foreach-silmukan sisรคltรคvien kohteiden lukemista. ICollection laajentaa sitรค ja lisรครค jรคseniรค, kuten Count, Add ja Remove, joten se tukee myรถs kokoelman muokkaamista.

List on geneerinen, tyyppivarma kokoelma, joka tallentaa yhden ilmoitetun tyypin, mikรค mahdollistaa kรครคnnรถsaikaiset tarkistukset ja paremman suorituskyvyn. ArrayList on ei-geneerinen ja tallentaa jokaisen alkion objektina, joka vaatii tyyppimuunnoksen ja sallii sekatyyppiset tyypit.

Stack-tyyppinen operaatio toimii viimeisenรค sisรครคn, ensin ulos -jรคrjestyksessรค, joten uusin kohde poistetaan ensin Pop-komennolla. Queue-tyyppinen operaatio toimii ensimmรคisenรค sisรครคn, ensin ulos -jรคrjestyksessรค, joten vanhin kohde poistetaan ensin Dequeue-komennolla.

Kyllรค. GitHub Copilot voi ehdottaa oikeaa kokoelmatyyppiรค, luoda silmukoita, jotka lisรครคvรคt tai suodattavat kohteita, ja suorittaa LINQ-kyselyitรค lyhyen kommentin perusteella, mikรค nopeuttaa tyรถskentelyรค listojen, sanakirjojen ja muiden kokoelmien kanssa.

ML.NET syรถttรครค harjoitusdataa kokoelmien, kuten List ja IEnumerable, kautta, jotka vastaavat sen IDataView-prosessia. Nรคytteiden tallentaminen vahvasti tyypitettyyn yleiseen kokoelmaan pitรครค koneoppimisen tyรถnkulun selkeรคnรค ja tyyppiturvallisena.

Tiivistรค tรคmรค viesti seuraavasti: