C# ir .NET pamokėlės #6. Masyvai

Masyvas (angl. Array) – rinkinys vienodo tipo informacijos, kuri yra saugoma kaip vienas kintamasis. Masyvai yra geras pasirinkimas, kai mums reikia saugoti daug vienodos informacijos, pavyzdžiui, mokinių mokymosi vidurkius. Struktūra:

int[] Vidurkiai = new int[10];

int[] nurodo, kokio tipo informacija bus saugoma masyve. Nepamirškite, kad jei pasirinkote masyvo tipą int, tai jokio kito tipo informacijos įdėtį į tą masyvą negalėsite, kaip pavyzdžiui string ar double.
Vidurkiai yra mūsų masyvo pavadinimas.
new int[10] – masyvo sukūrimas. Skliaustuose 10 nurodo, kiek įrašų mes galime įrašytį į tą masyvą, šiuo atvėju – 10.
Jeigu tarkime norėtume string masyvą susikurti:

string[] Vardai = new string[5];

Atkreipkite dėmesį, kad string[] pradžioje, ir gale string[5] turi būt vienodo tipo. Jei double, tai abiejuose vietose double.
Jeigu mes turime mažai duomenų ir iš kart rankomis galime juos surašyti, galime taikyti tokį metodą:

int[] Skaiciai = {1, 15, 34, 3, 61};

Masyvo ilgis bus 5, nes masyvą sudarėme iš 5 skaičių. Taigi kaip pasiekti, tarkime, skaičių 34 ir jį išvesti į ekraną? Labai paprastai:
Skaiciai[2] rodys skaičių 34. Paklausite, kodėl 2, o ne 3? Juk akivaizdžiai matosi, kad trečioje vietoje stovi skaičius. C# kalboje, masyvo elementų (informacijos masyvo viduje) skaičiavimas prasideda nuo 0, tad jei mums reik atspausdinti pirmąjį elementą, mes tai atliksime štai šitaip:

Console.WriteLine(Skaiciai[0]);

Pavyzdys, kaip užsaugoti 5 vardus masyve ir juos atspausdinti:

using System;

class Klase
{
    static void Main()
    {
        string[] Vardai = new string[5];
        Vardai[0] = "Audrius";
        Vardai[1] = "Jonas";
        Vardai[2] = "Giedrius";
        Vardai[3] = "Mindaugas";
        Vardai[4] = "Mantas";

        for (int i = 0; i < Vardai.Length; i++)
            Console.WriteLine(Vardai[i]);
    }
}

7 eilutėje sukūrėmė masyvą. Toliau 8-12 eilutėse sudėjom informaciją į mūsų masyvą, o 14-15 atspausdinom visus į ekraną. Įsiminkite, kad paskutinysis masyvo elemento indeksas yra 4, o ne 5, nes skaičiuojama nuo 0. Šį pavyzdį galima realizuoti ir kitaip:

using System;

class Klase
{
    static void Main()
    {
        string[] Vardai = { "Audrius", "Jonas", "Giedrius", "Mindaugas", "Mantas" };

        for (int i = 0; i < Vardai.Length; i++)
            Console.WriteLine(Vardai[i]);
    }
}

Bet šis variantas nėra visad patogus.

Matricos, kelių dimensijų masyvai

Aukščiau matėte vienos dimensijos masyvą, kurio elementus pasiekt užteko vieno skaičiuko, kuris nurodo jo vietą eilėje. Bet būna situacijų, kai keli aukštai mums labiau praverstų. C# suteikia mums galimybę turėti dviejų tipų masyvus: „stačiakampius“(angl. Multidimensional arrays) ir „dantytus“(angl. Array-of-arrays (jagged)).

Stačiakampės

Tokie dviejų dimensijų masyvai gali saugoti informaciją, atrodančia kaip kokia matrica. Tarkime pavyzdys: kiekvienoje eilutėje (arba stulpelyje) būtų surašyti vieno mokinio egzaminų vidurkiai. Stačiakampį masyvą labai lengva atskirti, nes jo visų eilučių ilgiai yra vienodi. Šio tipo masyvą dažniausiai ir naudosite, nebent dirbsite su labai daug duomenų.. Pavydys:

double[,] Vidurkiai = new double[2,5]; //[eilutė,stulpelis]

Pavyzdys, kaip į stačiakampį masyvą, 2x3 išmatavimų, surašyti ankstesnį pavyzdį su vardais:

using System;

class Klase
{
    static void Main()
    {
        string[,] Vardai = new string[2,3];
        Vardai[0,0] = "Audrius";
        Vardai[0,1] = "Jonas";
        Vardai[0,2] = "Giedrius";
        Vardai[1,0] = "Mindaugas";
        Vardai[1,1] = "Mantas";
        Vardai[1,2] = "Virgis";

        for (int i = 0; i < 2; i++)
        {
            for (int j = 0; j < 3; j++)
                Console.Write(Vardai[i, j] + " ");
            Console.WriteLine();
        }
    }
}

masyvai1 576x478

Šį kart, kad atspausdintume visus duomenis, mums reikia net dviejų ciklų. Pirmasis eina pro eilutes, antrasis per stulpelius. Kaip matome iš duomenų sukėlimo į masyvą, kad pasiekti Giedrių, mes turime kreiptis Vardai[0,2]

Dantytos

Būna atvėjų, kai stačiakampis masyvas tiesiog eikvoja atmintyje vietą. Taip yra todėl, kad duomenų skaičius eilutėse gali skirtis. Tarkime tas pats pavyzdys su mokinių egzaminų rezultatais. Gal koks vienas mokinys nelaikė visų egzaminų.. O dabar įsivaizduokime, kad vienoje eilutėje būtų surašomi visos mokyklos mokinių mokymosi vidurkiai. Tai vienoj eilutėj gali būti 3000, kitoj 10000 duomenų, o jei mums reikėtų surašyti visos Lietuvos mokyklų duomenis? Šiam atvėjui labai patogu būtų naudoti dantytus masyvus. Dantyto masyvo struktūra:

int[][] Paz = new int[50][];

Struktūra šiek tiek skiriasi nuo paprasto stačiakampio masyvo. Kaip matome pradžioje [,] pakeitė [][] bei gale [50][]. Pirmuosiuose skliaustuose, mes nurodėme, kad turėsime 50 eilučių masyve. Galima įsivaizduoti kaip penkiasdešimties aukštų pastatą. O antrieji skliaustai tušti, nes kolkas mes nenurodėme kiekvienos atskiros eilutės (aukšto) ilgio. Pabrėžtina, kad negalima sukuriant tokio tipo masyvo nurodyti antruose skliaustuose skaičiaus, nes išmes mums klaida, o ir pagalvojus, tai jau pasidarytų stačiakampis masyvas, tik reiktų pakoreaguotį struktūrą (žiūrėti aukščiau).

Taigi, kaip mum nustatyti kiekvienos eilutės ilgį?

Paz[0] = new int[20];
Paz[1] = new int[5];
…

Taigi pirmai eilutei nustatėme ilgį 20, antram 5. Galimas ir kitas variantas:

Paz[0] = new int[] { 5, 89, 26, 1, 5 }

Tai iš kart surašant reikšmes. Šiuo atvėju surašėme 5 reikšmes, tad ir ilgis bus toks pat. Pavyzdys:
masyvai2 576x255

7-oj eilutėj pasirašėmė kintamąjį, kuris nurodys mūsų „Pastato“ aukštį, arba kitaip tariant eilučių kiekį. 8-oj eilutėj sukūrėmė masyvą. 9-11 nurodėmė kiekvieno aukščio ilgį. 13-21 užpildėmė aukštus duomenimis. 23-28 Spausdiname rezultatus. Atkreipkite dėmesį 25-oj eilutėj mum reikia nurodyti eilutės numerį, kad gautume jo ilgį, nes tiesiog Paz.Length rodytų pirmos eilutės ilgį, o kadangi, pas mus eilutės nėra lygios, gausime klaidą, arba neatspausdinsime visų reikšmių.

Šiam kartui tiek.

Susiję įrašai:

  1. C# ir .NET pamokėlės #7. String Sveiki. Kadangi dažnai įvairiose programose reikia atlikti įvairius veiksmus su...
  2. C# ir .NET pamokėlės #3. Sąlygos sakiniai Sąlygos sakinys, tai if...else formuluotė. Jeigu esate programavę su kokia...
  3. C# ir .NET pamokėlės #2. Kintamieji Vienas iš dalykų, be kurių nei vienas programuotojas negalėtų apsieiti...
  4. C# ir .NET pamokėlės #5. Metodai Tai vienas iš naudingiausių įrankių kuriant programas. Jei esate dirbę...
  5. C# ir .NET pamokėlės #4. Ciklai Ciklas, tai kokio nors veiksmo atlikimas keletą kartų. Pavyzdžiui, kad...
Topix Rokit Twitter Facebook Digg Delicious Stumbleupon

1 komentaras apie įrašą „C# ir .NET pamokėlės #6. Masyvai“

  1. Nerašiau prie Ciklų straipsnio apie ciklą foreach, nes jis veikia tik su sąrašais ir masyvais, bet manau čia jau galima būtų jį paminėti. Labai patogus dalykas.

Palikti atsakymą