csharp.aspone.cz csharp.aspone.cz

Pole (array)

Pole je skupina prvků stejného typu se kterou se dá zacházet jako s celkem. Proměnné v této skupině se nazývají prvky pole, jsou očíslovány (indexovány) a s jednotlivými prvku se pracuje pomocí jejich pořadových čísel (indexů). Pole jsou referenční typy a jsou odvozena ze třídy System.Array. Pole začíná indexem nula, je možné pomocí statické metody System.Array.CreateInstance() vytvořit pole s libovolnou dolní mezí.

Deklarace pole

Jednorozměrné:
    typ[] seznam_identifikatoru;

Dvourozměrné:
    typ[,] seznam_identifikatoru;

    // deklarace odkazů
    int[] x;          
    // deklarace odkazů        
    int[] x, y;     
    // deklarace odkazů 
    string[] knihy;     

Typ je typ prvků pole. Následují prázdné hranaté závorky říkají, že deklarujeme pole, nikoli obyčejnou proměnnou. Seznam identifikatorů, to jsou identifikátory deklarovaných odkazů.
V deklaraci se neuvádí počet prvků pole. Ten se určí později až se bude poel vytvářet.
První možností v uvedeném popisu syntaxe obsahuje prázdné lomené závorky a slouží k deklaraci jednorozměrného pole.
Druhá možnost obsahuje v lomených závorkách čárku a slouží k deklaraci pole se dvěma indexy (dvourozměrného).
Chceme-li pole s n indexy, tak napíšeme do lomených závorek n-1 čárek.

Vytvoření pole
K vytvoření pole se použije operátor new. Tento operátor vrátí odkaz na nově vytvořené pole. Za operátorem new se uvede typ prvků a jejich počet.

x = new int[8];  //vytvoření nového pole typu int s 8 prvky
x = y;  //přiřazení odkazu, pole jsou referenční typy, nevytváří se kopie
knihy = new string[4];  //pole typů string se 4 prvky

Musím však připomenout, že když budu mít pole s 8 prvky, jejich index budou začínat od nuly. Takže k prvkům z pole velkého 8, se dostanu indexi 0 - 7. V poli řetězců se 4 prvky jsou indexi 0 - 3.
Pole zanikne až budou zrušeny všechny odkazy na něj.
Vše můžu samozřejmě napsat do jednoho řádku.

int[] knihy = new knihy[4];

INICIALIZACE POLE - Pole můžu naplnit takto:

knihy[0] = "Kniha 1";

knihy[1] = "Kniha 2";
knihy[2] = "Kniha 3";
knihy[3] = "Kniha 4";

Pokud znám prvky pole předem, můžu je tam zapsat přímo v deklaraci. Za identifikátor napíšeme rovnítko a pak ve složených závorkách jednotlivé prvky oddělené čárkami a to takto:

double[] cisla = {45, 34, 34, 32, 64};

Program vytvoří pole o potřebném počtu prvků, uloží do něj dané hodnoty a okdaz na ně přiřadí proměnné čísla.
Také pole vytvořené pomocí new můžeme inicializovat. Prostě za zápis operátoru new připíšeme do lomených závorek seznam hodnot.

double[] cisla = new double[3] {43, 3, 2};

Tak zde máme pár inicializací a deklarací jednorozměrného pole

using System;


class policko
{
    static void Main()
    {
    //pole řetězců
        string[] LOTR = new string[4];
        LOTR[0] = "Minas Morgul";
        LOTR[1] = "Minas Thirith";
        LOTR[2] = "Lothlorien";
        LOTR[3] = "Dol-Guldur";

 
        foreach (string s in LOTR)
            Console.WriteLine(s);

        Console.Write("\n");

        string[] oblasti;
        oblasti = new string[3];
        oblasti[0] = "Morie";
        oblasti[1] = "Mordor";
        oblasti[2] = "Středozem";

        foreach (string s in oblasti)
            Console.WriteLine(s);

        Console.Write("\n");

        //pole intů
        int[] cisla = new int[10];
        cisla[0] = 1;
        cisla[3] = 4;
        cisla[9] = 10;
        //cisla[10] = 34;  pozor zde by byla chyba, 
        //pac bych inicializoval někde mimo pole :D
        //zde take vidime, že ostatní indexi pole jsou  
        //automaticky inicializované nulou

        foreach (int vypisCisla in cisla) 
        Console.WriteLine(vypisCisla);

        Console.Write("\n");

     //zde mame dalsi inicializaci pole s prvky jak
     //jdou za sebou
    int[] dalsiCisla = new int[] { 3, 4, 9, 90 };
    foreach (int vypisDalsiCisla in dalsiCisla)
        Console.WriteLine(vypisDalsiCisla);

    Console.Write("\n");

    //pozor pri teto inicializaci musim dosadit vsech
    //sest hodnot, jinak mi to hodi chybku
    int[] _01_cisla = new int[6] {5, 3, 4, 4, 4, 4};
    foreach (int vypis in _01_cisla)
        Console.WriteLine(vypis);
    Console.Write("\n");

    //pokud chci typ char, musim dat znaky do apostrofů
    char[] zkouska = new char[4];
    zkouska[0] = '4';
    zkouska[1] = 'd';
    zkouska[2] = 'k';
    zkouska[3] = '5';

    foreach (char vypis in zkouska)
        Console.WriteLine(vypis);
    }
}

Zde jsem si dal práci nad poli v jazyku C#. No snad to bude jasné.

using System;

class pole
{
    static void Main()
    {
        int[] cisla = new int[2];
        cisla[0] = 666;
        cisla[1] = 999;

        char[] samohlasky = new char[] { 'a', 'e', 'i', 'o', 'u' };
        Console.WriteLine(samohlasky[3]);

        for (int r = 0; r < samohlasky.Length; r++)
        {
            Console.WriteLine(r + " = " + samohlasky[r]);
        }
        Console.Write("\n");
        for (int k = 0; k < cisla.Length; k++)
        {
            Console.WriteLine(cisla[k]);
        }

        Console.WriteLine("\n");

        foreach (char vypis in samohlasky)
        {
            Console.WriteLine(vypis);
        }

        string[] mamRad = new string[9];
        mamRad[0] = "\nSystem of a down";
        mamRad[1] = "Metallica";
        mamRad[2] = "Nightwish";
        mamRad[3] = "Prodigy";
        mamRad[4] = "Daniel Landa";
        mamRad[5] = "Moby";
        mamRad[6] = "Bloodhound Gang";
        mamRad[7] = "Faithless";
        mamRad[8] = "Offspring";

        foreach(string skupiny in mamRad)
        Console.WriteLine(skupiny);
   
    //vypise to co je v indexech pole
    for (int g = 0; g < mamRad.Length; g++)
        Console.WriteLine(mamRad[g]);


 //kazdy index naplni cislem 4
        int[] numera = new int[8];
        for (int h = 0; h < numera.Length; h++)
        {
            numera[h] += 4;
            Console.WriteLine(numera[h]);
        }

        Console.Write("\n");


    //zde demonstrace chyby :D
    //chtel jsem kazde pole naplit tak, aby 
    //se k nemu vzdy precetla hodnota nasledujiciho
    //pole, ale jen jsem menil index 0 stale jinou
    //hodnotou ^^
        int[] numera2 = new int[8];
        for (int h = 0; h < 1; h++)
        {
            for (int s = 0; s < numera2.Length; s++)
            {

                numera2[h] += s;
                Console.WriteLine(numera2[h]);
            }
        }
        //odradkovani :D
        Console.Write("\n");

  //inicializace pole je rovna jeho indexu
        int[] numera3 = new int[8];
        for (int h = 0; h < numera3.Length; h++)
        {

            int k = h;

            numera3[h] += k;
           
                Console.WriteLine(numera3[h]);


        }
        Console.Write("\n");
        //kontrola --> je to naplneny po jedny 
        Console.WriteLine(numera3[0]);
        Console.WriteLine(numera3[3]);
        Console.WriteLine(numera3[5]);

    

      //inicializace pole zacina s hodnotami od jedne
        int[] numera4 = new int[8];
        for (int h = 0; h < numera4.Length; h++)
        {
            int k = h;
            k++;

            numera4[h] += k;
           
            Console.WriteLine(numera4[h]);


        }
        Console.Write("\n");
        //kontrola --> je to naplneny o5 po jedne od jedne
        Console.WriteLine(numera4[0]);
        Console.WriteLine(numera4[3]);
        Console.WriteLine(numera4[5]);

        Console.Write("\n");

        //inicializace pole zacina s hodnotami od nuly
        int[] numera5 = new int[8];
        int l = 0;
        for (int h = 0; h < numera5.Length; h++)
        {

            l += h;
            numera5[h] += l;

            Console.WriteLine(numera5[h]);


        }
        Console.Write("\n");
        //kontrola --> je to vzdy cislem vetsi o to predchazejici
        Console.WriteLine(numera5[0]);
        Console.WriteLine(numera5[3]);
        Console.WriteLine(numera5[5]);

    }
}