5. Pole

Pole chápeme jako množinu proměnných stejného datového typu. S takovým polem pak zacházíme jako s celkem. Na jednotlivé prvky pole (proměnné) se můžeme odkazovat pomocí jejich indexů pole a poté s nimi pracovat jako s obyčejnými proměnnými. Každý počáteční prvek pole v C# má index 0, pokud tedy máme pole délky N, index posledního prvku bude N-1.

5.1. Deklarace pole

V C# existují dva způsoby, jak deklarovat pole. První ze způsobů více naznačuje objektovost polí. Ten si ukážeme jen "ve zkratce", více se budeme zabývat druhým, klasickým a určitě i praktičtějším způsobem.

Jazyk C# umožňuje vytvořit instanci pole pomocí statické metody System.Array.CreateInstance(). Tento způsob více odpovídá objektové charakteristice tvorby objektů.

[ukázka kódu]
using System; 
...
Array pole = Array.CreateInstance(typeof(int), 4);

Vytvořili jsme instanci třídy Array typu int se čtyřmi prvky. Pokud budeme toto pole chtít naplnit, nemůžeme již k jednotlivým prvkům přistupovat pomocí indexů, jako jsme byli zvyklí u běžných polí. Je třeba k těmto prvkům přistupovat pomocí metod SetValue() a GetValue().

[ukázka kódu]
... 
pole.SetValue(3, 0); // na nultou pozici pole vlozime cislo 3 
Console.WriteLine(pole.GetValue(0)); // vytiskneme 0. prvek pole 
...

Stejným způsobem, ale i s možností přistupovat k jednotlivým prvkům pole pomocí indexů, můžeme tehdy, pokud vytvoříme pole druhou (následující) konstrukcí. První způsob tedy opustíme.

Pro jednorozměrná pole v jazyce C# platí deklarace:

typ[] nazev_pole;

5.2. Vícerozměrná pole

Pokud chceme deklarovat vícerozměrné pravidelné pole, píšeme nejprve typ pole, následují hranaté závorky, do kterých napíšeme pouze čárky podle toho, kolikarozměrné pole chceme používat. Příklad: Deklarace 2-rozměrného pole s názvem pole typu int

[ukázka kódu]
int[,] pole = new int[2,2] { {2, 1}, {4, 3} };

5.3. Vícerozměrná nepravidelná pole

V jazyce C# lze používat i nepravidelná pole. Nepravidelná pole se vyznačují různou délkou jednotlivých "řádků" pole. Pokud například chceme vytvořit pole, které má v prvním řádku 3 prvky a v druhém 2 prvky, provedeme to následovně:

[ukázka kódu]
int[][] pole;
pole = new int[2];
pole[0] = new int[3];
pole[1] = new int[2];

Přístup k jednotlivým prvkům pole se pak provádí následovně: pole[0][0] nám vrátí hodnotu prvku v první řadě a prvním sloupci.

5.4. Práce s poli

Spousta užitečných operací, které s poli provádíme, se nachází ve třídě System.Array.

5.4.1. Kopírování polí

Místo obvykle používaného cyklu pro kopírování pole x do pole y:

[ukázka kódu]
for(int i=0; i<=x.Length; i++) y[i] = x[i];

lze použít metodu CopyTo() dostupnou všem polím

[ukázka kódu]
CopyTo() 
x.CopyTo(y,0);

kde první parametr udává cílové pole, do kterého se má kopírovat druhý parametr udává počáteční index, na který se bude ukládat. Pokud cílové pole od daného počátečního indexu nebude dostatečně dlouhé, vyvolá se výjimka.

Třída Array nabízí také metodu pro vyhledávání hodnoty v poli Array.BinarySearch(), implementuje i třídění polí metodou Array.Sort(), převrácení pole Array.Reverse(). Pro vrácení indexu prvku na základě rovnosti hodnot (objektů) slouží metody Array.IndexOf() a LastIndexOf().

[příklad ke stažení]

Ukázkový příklad demonstrující některé metody třídy Array si můžete vyzkoušet zde.