Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Mitä Listat Ovat? | Tietorakenteet ja Tiedostojen Käsittely
C# Perusteiden Jälkeen

bookMitä Listat Ovat?

Prerequisites
Edellytykset

Kuvitellaan tilanne, jossa haluamme tallentaa kaikkien tiettyä kurssia suorittavien opiskelijoiden nimet. Ensimmäinen mieleen tuleva ratkaisu on luoda taulukko:

index.cs

index.cs

copy
123456
using 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.

Note
Huomio

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

index.cs

copy
12345678910
using 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

index.cs

copy
1
using 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

index.cs

copy
123456789101112131415
using 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

index.cs

copy
1234567891011121314151617
using 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

index.cs

copy
123456789101112131415161718
using 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

index.cs

copy
1234567891011121314151617181920
using 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

index.cs

copy
12345678910111213141516
using 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

index.cs

copy
123456789101112131415
using 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

index.cs

copy
123456789101112131415
using 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); } } }
Note
Vinkki:

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

index.cs

copy
1
float 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

index.cs

copy
1
var number = 7.9f;

Voimme käyttää epäsuoraa määrittelyä myös listoja määriteltäessä:

index.cs

index.cs

copy
1
var 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?

question mark

Mikä on seuraavan koodin tuloste:

Select the correct answer

question mark

Mikä moduuli täytyy tuoda, jotta listoja voi käyttää?

Select the correct answer

question mark

Mitä metodia käytetään listan koon (pituuden) hakemiseen?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 1

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

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

bookMitä Listat Ovat?

Pyyhkäise näyttääksesi valikon

Prerequisites
Edellytykset

Kuvitellaan tilanne, jossa haluamme tallentaa kaikkien tiettyä kurssia suorittavien opiskelijoiden nimet. Ensimmäinen mieleen tuleva ratkaisu on luoda taulukko:

index.cs

index.cs

copy
123456
using 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.

Note
Huomio

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

index.cs

copy
12345678910
using 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

index.cs

copy
1
using 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

index.cs

copy
123456789101112131415
using 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

index.cs

copy
1234567891011121314151617
using 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

index.cs

copy
123456789101112131415161718
using 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

index.cs

copy
1234567891011121314151617181920
using 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

index.cs

copy
12345678910111213141516
using 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

index.cs

copy
123456789101112131415
using 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

index.cs

copy
123456789101112131415
using 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); } } }
Note
Vinkki:

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

index.cs

copy
1
float 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

index.cs

copy
1
var number = 7.9f;

Voimme käyttää epäsuoraa määrittelyä myös listoja määriteltäessä:

index.cs

index.cs

copy
1
var 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?

question mark

Mikä on seuraavan koodin tuloste:

Select the correct answer

question mark

Mikä moduuli täytyy tuoda, jotta listoja voi käyttää?

Select the correct answer

question mark

Mitä metodia käytetään listan koon (pituuden) hakemiseen?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 1
some-alt