Tablice #
Tablice to typ referencyjny reprezentujący stałą liczbę elementów tego samego typu. Elementy w tablicy są przechowywane zawsze w ciągłym obszarze pamięci. Typ tablicowy oznaczamy za pomocą typu i par nawiasów kwadratowych. Tak jak w normalnych językach programowania tablice indeksujemy od 0.
Właściwość Length
dostarcza rozmiar tablicy. Po jej stworzeniu nie może on zostać zmieniony.
Wszystkie typy tablicowe dziedziczą po System.Array
. W tej klasie znajduje się też kilka użytecznych metod które pomagają operować na tablicach, np. Sort
, Reverse
, BinarySearch
, Clear
, Fill
, Copy
, Resize
(tworzy nową tablicę i kopiuje elementy).
Elementy tablicy, jeżeli nie są jawnie podane, to są niejawnie inicjalizowane zerami, dla tablic typów referencyjnych oznacza to tablicę null
referencji.
Wszystkie błędy związane z indeksowaniem tablic są sprawdzane w czasie działania programu. Wyjście poza zakres tablicy powoduje rzucenie wyjątku IndexOutOfRangeException
.
int[] primes = new int[] {2, 3, 5, 7, 11};
char[] vowels = {'a', 'e', 'i', 'o', 'u'};
uint[] even = [0, 2, 4, 6, 8]; // C# 12
float[] data = new float[10];
Array array = primes;
Console.WriteLine($"Primes array length: {primes.Length}");
for (int i = 0; i < primes.Length; i++)
{
Console.WriteLine(primes[i]);
}
Indeksy i zakresy #
Indeksy pozwalają indeksować tablicę od końca za pomocą operatora ^
. ^1
odnosi się do ostatniego elementu, ^2
do przedostatniego itd. Uwaga: ^0
odnosi się do array.Length
(czyli już poza tablicą).
Zakresy pozwalają natomiast wybrać podtablicę za pomocą operatora ..
. Po lewej stronie tego operatora można wstawić indeks od którego elementu włącznie, a po prawej indeks do którego elementu wyłącznie wybrać podtablicę. Domyślnie jeżeli się ich nie poda to są zastępowane odpowiednio przez 0
i ^0
, czyli początek i koniec.
int[] primes = new int[] {2, 3, 5, 7};
int firstElem = primes[0], secondElem = primes[1];
int lastElem = primes[^1], secondToLastElem = primes[^2];
Index first = 0;
Index last = ^1;
firstElem = primes[first]; lastElem = primes[last];
int[] firstTwo = primes[..2]; //exclusive end
int[] withoutFirst = primes[1..]; // inclusive start
int[] withoutLast = primes[..^1];
int[] withoutFirstAndLast = primes[1..^1];
int[] all = primes[..];
Range lastTwoRange = ^2..;
int[] lastTwo = primes[lastTwoRange];
Tablice prostokątne #
Tablice prostokątne deklaruje się używając ,
do wyspecyfikowania każdego z wymiarów. Tak samo jak tablice jednowymiarowe, można je zainicjalizować jawnie podając listę elementów. Metoda GetLength(int)
zwraca długość tablicy wzdłuż i
-tego wymiaru (zaczynając od 0).
float[,] matrix = new float[,]
{
{1.0f, 0.0f, 0.0f},
{0.0f, 1.0f, 0.0f},
{0.0f, 0.0f, 1.0f}
};
float[,] matrix3x4 = new float[3, 4];
for (int i = 0; i < matrix.Length(0); i++)
{
for (int j = 0; j < matrix.Length(1); j++)
{
Console.WriteLine($"m[{i}, {j}] = {matrix[i, j]}");
}
}