Mitä Listat Ovat?

Kuvitellaan tilanne, jossa haluamme tallentaa kaikkien tiettyä kurssia suorittavien opiskelijoiden nimet. Ensimmäinen mieleen tuleva ratkaisu on luoda taulukko:
index.cs
123456using System; class Program { string[] studentNames = new string[50]; }
Jos opiskelijoita on jossain vaiheessa yli 50, emme voi tallentaa heidän nimiään. Vastaavasti, jos opiskelijoita on alle 50, taulukon käyttämättömät paikat ovat hukattua muistia – tämä muodostuu ongelmaksi erityisesti suurissa taulukoissa.
Tässä tarvitaan uusi rakenne, joka voi tallentaa vaihtelevan määrän alkioita. Onneksi tällainen rakenne on jo olemassa, sitä kutsutaan nimellä List.
Listat ovat hyvin samanlaisia kuin taulukot, mutta listaan tallennettavien alkioiden määrä voi muuttua.

On mahdollista muokata olemassa olevia alkioita taulukossa, mutta siihen ei voi lisätä uusia tietueita.
Seuraava on syntaksi tyhjän listan määrittelyyn:

Tällä syntaksilla voidaan luoda lista opiskelijoiden nimien tallentamista varten:
index.cs
12345678910using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); } }
On tärkeää huomata, että meidän täytyy tuoda Generic
-moduuli, jotta voimme käyttää Listoja.
index.cs
1using System.Collections.Generic;
Sinun tarvitsee vain lisätä tämä rivi using System;
-kohdan alle tuodaksesi tarvittavan moduulin.
Add()-metodi
Voimme lisätä alkioita listaan käyttämällä Add
-metodia:
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); } }
Yllä oleva koodi lisää neljä alkiota students
-listaan.
Aivan kuten string
-tyyppinen taulukko voi sisältää vain string
-alkioita, myös string
-tyyppinen lista voi hyväksyä vain string
-alkioita.
Indeksointi
Ensimmäinen alkio on Anna
, joten sen indeksi on 0
, kun taas Laura
on indeksissä 1
ja niin edelleen. Listan alkioihin pääsee käsiksi indeksoinnin avulla aivan kuten taulukossa:
index.cs
1234567891011121314151617using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); } }
Count()-metodi
Listan pituus voidaan hakea sen Count
-attribuutin avulla:
index.cs
123456789101112131415161718using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); Console.WriteLine(students.Count); } }
Dynaaminen pituus
Huomaa, että listan pituus on dynaaminen (muuttuva), joten se muuttuu, kun lisäämme alkioita:
index.cs
1234567891011121314151617181920using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); Console.WriteLine(students.Count); students.Add("Anna"); Console.WriteLine(students.Count); students.Add("Laura"); Console.WriteLine(students.Count); students.Add("Jacob"); Console.WriteLine(students.Count); students.Add("Aron"); Console.WriteLine(students.Count); } }
Alustaminen
Voimme myös alustaa listan joillakin alkioilla käyttämällä seuraavaa syntaksia:
List<dataType> listName = new List<dataType>{ element1, element2, … };
index.cs
12345678910111213141516using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; // It is still possible to add additional elements after initialization students.Add("Markus"); Console.WriteLine(students.Count); Console.WriteLine(students[4]); } }
Listojen läpikäynti
Listan läpikäynti tapahtuu samalla tavalla kuin taulukoiden kanssa
for-silmukan käyttäminen
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; for (int i = 0; i < students.Count; i++) { Console.WriteLine(students[i]); } } }
Foreach-silmukan käyttäminen
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; foreach (string studentName in students) { Console.WriteLine(studentName); } } }
Voimme lyhentää muuttujan määrittelysyntaksia käyttämällä implisiittistä määrittelyä. Kertauksena, eksplisiittinen määrittely tarkoittaa, että määrittelemme tietotyypin muuttujan määrittelyn yhteydessä.
index.cs
1float number = 7.9f;
Toisaalta, implisiittisessä määrittelyssä voimme yksinkertaisesti käyttää var
-avainsanaa, jolloin kääntäjä päättelee muuttujan tietotyypin automaattisesti annetun arvon perusteella:
index.cs
1var number = 7.9f;
Voimme käyttää epäsuoraa määrittelyä myös listoja määriteltäessä:
index.cs
1var numbers = new List<int> { 1, 2, 3, 4, 5 };
1. Mikä on seuraavan koodin tuloste:
2. Mikä moduuli täytyy tuoda, jotta listoja voi käyttää?
3. Mitä metodia käytetään listan koon (pituuden) hakemiseen?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
What is the difference between an array and a list in C#?
Can you show an example of how to add elements to a list?
How do I access elements in a list using indexing?
Awesome!
Completion rate improved to 2.04
Mitä Listat Ovat?
Pyyhkäise näyttääksesi valikon

Kuvitellaan tilanne, jossa haluamme tallentaa kaikkien tiettyä kurssia suorittavien opiskelijoiden nimet. Ensimmäinen mieleen tuleva ratkaisu on luoda taulukko:
index.cs
123456using System; class Program { string[] studentNames = new string[50]; }
Jos opiskelijoita on jossain vaiheessa yli 50, emme voi tallentaa heidän nimiään. Vastaavasti, jos opiskelijoita on alle 50, taulukon käyttämättömät paikat ovat hukattua muistia – tämä muodostuu ongelmaksi erityisesti suurissa taulukoissa.
Tässä tarvitaan uusi rakenne, joka voi tallentaa vaihtelevan määrän alkioita. Onneksi tällainen rakenne on jo olemassa, sitä kutsutaan nimellä List.
Listat ovat hyvin samanlaisia kuin taulukot, mutta listaan tallennettavien alkioiden määrä voi muuttua.

On mahdollista muokata olemassa olevia alkioita taulukossa, mutta siihen ei voi lisätä uusia tietueita.
Seuraava on syntaksi tyhjän listan määrittelyyn:

Tällä syntaksilla voidaan luoda lista opiskelijoiden nimien tallentamista varten:
index.cs
12345678910using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); } }
On tärkeää huomata, että meidän täytyy tuoda Generic
-moduuli, jotta voimme käyttää Listoja.
index.cs
1using System.Collections.Generic;
Sinun tarvitsee vain lisätä tämä rivi using System;
-kohdan alle tuodaksesi tarvittavan moduulin.
Add()-metodi
Voimme lisätä alkioita listaan käyttämällä Add
-metodia:
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); } }
Yllä oleva koodi lisää neljä alkiota students
-listaan.
Aivan kuten string
-tyyppinen taulukko voi sisältää vain string
-alkioita, myös string
-tyyppinen lista voi hyväksyä vain string
-alkioita.
Indeksointi
Ensimmäinen alkio on Anna
, joten sen indeksi on 0
, kun taas Laura
on indeksissä 1
ja niin edelleen. Listan alkioihin pääsee käsiksi indeksoinnin avulla aivan kuten taulukossa:
index.cs
1234567891011121314151617using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); } }
Count()-metodi
Listan pituus voidaan hakea sen Count
-attribuutin avulla:
index.cs
123456789101112131415161718using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); Console.WriteLine(students.Count); } }
Dynaaminen pituus
Huomaa, että listan pituus on dynaaminen (muuttuva), joten se muuttuu, kun lisäämme alkioita:
index.cs
1234567891011121314151617181920using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); Console.WriteLine(students.Count); students.Add("Anna"); Console.WriteLine(students.Count); students.Add("Laura"); Console.WriteLine(students.Count); students.Add("Jacob"); Console.WriteLine(students.Count); students.Add("Aron"); Console.WriteLine(students.Count); } }
Alustaminen
Voimme myös alustaa listan joillakin alkioilla käyttämällä seuraavaa syntaksia:
List<dataType> listName = new List<dataType>{ element1, element2, … };
index.cs
12345678910111213141516using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; // It is still possible to add additional elements after initialization students.Add("Markus"); Console.WriteLine(students.Count); Console.WriteLine(students[4]); } }
Listojen läpikäynti
Listan läpikäynti tapahtuu samalla tavalla kuin taulukoiden kanssa
for-silmukan käyttäminen
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; for (int i = 0; i < students.Count; i++) { Console.WriteLine(students[i]); } } }
Foreach-silmukan käyttäminen
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; foreach (string studentName in students) { Console.WriteLine(studentName); } } }
Voimme lyhentää muuttujan määrittelysyntaksia käyttämällä implisiittistä määrittelyä. Kertauksena, eksplisiittinen määrittely tarkoittaa, että määrittelemme tietotyypin muuttujan määrittelyn yhteydessä.
index.cs
1float number = 7.9f;
Toisaalta, implisiittisessä määrittelyssä voimme yksinkertaisesti käyttää var
-avainsanaa, jolloin kääntäjä päättelee muuttujan tietotyypin automaattisesti annetun arvon perusteella:
index.cs
1var number = 7.9f;
Voimme käyttää epäsuoraa määrittelyä myös listoja määriteltäessä:
index.cs
1var numbers = new List<int> { 1, 2, 3, 4, 5 };
1. Mikä on seuraavan koodin tuloste:
2. Mikä moduuli täytyy tuoda, jotta listoja voi käyttää?
3. Mitä metodia käytetään listan koon (pituuden) hakemiseen?
Kiitos palautteestasi!