Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Taulukon Kopiointi ja Muisti | Taulukon Käsittely ja Lajittelu
C#-Taulukot

Taulukon Kopiointi ja Muisti

Pyyhkäise näyttääksesi valikon

Kun työskentelet taulukoiden kanssa C#:ssa, on tärkeää ymmärtää, miten ne tallennetaan muistiin ja mitä tapahtuu, kun kopioit tai sijoitat niitä. Taulukot C#:ssa ovat viitetyyppejä, mikä tarkoittaa, että muuttujat sisältävät viittauksen (tai osoittimen) siihen, missä taulukon tiedot sijaitsevat muistissa, eivät itse tietoja. Tällä on merkittäviä vaikutuksia, kun sijoitat yhden taulukkoviitteen toiseen muuttujaan tai kun haluat tehdä aidon kopion taulukon sisällöstä. Jos nämä yksityiskohdat jäävät huomaamatta, saatat vahingossa muuttaa tietoja paikoissa, joissa et sitä tarkoittanut, mikä voi johtaa vaikeasti jäljitettäviin virheisiin.

Program.cs

Program.cs

12345678910111213141516171819202122232425262728293031
namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] original = { 1, 2, 3, 4, 5 }; // Assigning the array reference int[] assigned = original; // Copying the array elements int[] copied = new int[original.Length]; for (int i = 0; i < original.Length; i++) { copied[i] = original[i]; } // Modify the assigned array assigned[0] = 99; // Modify the copied array copied[1] = 77; System.Console.WriteLine("original: " + string.Join(", ", original)); System.Console.WriteLine("assigned: " + string.Join(", ", assigned)); System.Console.WriteLine("copied: " + string.Join(", ", copied)); } } }

Kun sijoitat yhden taulukkoviitteen toiseen, molemmat muuttujat osoittavat samaan muistipaikkaan. Tämä tarkoittaa, että yhden muuttujan kautta tehdyt muutokset näkyvät myös toisessa, koska ne ovat vain kaksi viittausta samaan taulukkoon. Jos haluat välttää tämän, jokainen alkio täytyy kopioida uuteen taulukkoon, kuten yllä olevassa koodissa on esitetty. Tämä luo uuden taulukon muistiin, joten muutokset toiseen taulukkoon eivät vaikuta toiseen.

Tämä liittyy käsitteisiin pintapuolinen kopio (shallow copy) ja syvä kopio (deep copy). Pintapuolinen kopio kopioi vain viittauksen taulukkoon, ei varsinaisia alkioita. Syvä kopio luo uuden taulukon ja kopioi jokaisen alkion siihen, jolloin tuloksena on kaksi toisistaan riippumatonta taulukkoa.

Program.cs

Program.cs

1234567891011121314151617
namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] numbers = { 10, 20, 30 }; int[] shallow = numbers; shallow[1] = 99; System.Console.WriteLine("numbers: " + string.Join(", ", numbers)); System.Console.WriteLine("shallow: " + string.Join(", ", shallow)); } } }

Tämä koodiesimerkki havainnollistaa, mitä tapahtuu, kun suoritat matalan kopion (shallow copy) taulukosta C#:ssa. Kun asetat yhden taulukkomuuttujan toisen arvoksi, kuten int[] shallow = numbers, et luo uutta taulukkoa tai kopioi alkioita. Sen sijaan molemmat muuttujat, numbers ja shallow, viittaavat samaan taulukkoon muistissa. Tämä tarkoittaa, että kaikki muutokset, jotka teet toisen muuttujan kautta, näkyvät myös toisen kautta.

Note
Määritelmä

Matalan kopion (shallow copy) tapauksessa viittaus taulukkoon kopioidaan, joten molemmat muuttujat osoittavat samaan muistipaikkaan. Syvä kopio (deep copy) luo uuden taulukon ja kopioi kaikki alkiot, jolloin taulukot ovat toisistaan riippumattomia.

1. Mitä tapahtuu, kun asetat yhden taulukkomuuttujan toisen arvoksi C#:ssa?

2. Miten voit luoda aidon kopion taulukosta?

3. Miksi taulukkomuistin ymmärtäminen on tärkeää tietoja käsiteltäessä?

question mark

Mitä tapahtuu, kun asetat yhden taulukkomuuttujan toisen arvoksi C#:ssa?

Valitse oikea vastaus

question mark

Miten voit luoda aidon kopion taulukosta?

Valitse oikea vastaus

question mark

Miksi taulukkomuistin ymmärtäminen on tärkeää tietoja käsiteltäessä?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 5

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Osio 3. Luku 5
some-alt