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.

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:-
- System.Collections.Generic-nimiavaruus tuodaan, jotta List-tyyppi on ohjelman kรคytettรคvissรค.
- Uusi lista nimeltรครคn tutorials luodaan ja kolme nimeรค lisรคtรครคn Add-metodilla.
- Remove-metodi poistaa arvon โPythonโ, mikรค jรคttรครค luetteloon kaksi kohtaa.
- 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.
