Nie milkną wcale echa na temat tablic w języku C#, gdyż teraz zajmiemy się drugim sposobem deklarowania i definiowania tablic wielowymiarowych. Przedstawiam Wam temat brzmiący "tablica zagnieżdżona w języku C#"!
TABLICA ZAGNIEŻDŻONA W JĘZYKU C# TO W GRUNCIE RZECZY TABLICA TABLIC!
Tablica zagnieżdżona oznacza de facto "przesiadywanie" jednej tablicy w drugiej. To jest ten drugi sposób zapisu tablic wielowymiarowych, z którym mieliście okazję powierzchownie się zapoznać w poprzedniej części:
int[][] numbers;
INICJALIZACJA
Napisałem, że wymaga on nieco innego podejścia podczas obsługi. Po pierwsze, zupełnie inny proces inicjalizacji. Teraz nie podajemy rzędów i kolumn, tylko sam pierwszy wymiar. Istotnie, trzeba skonkretyzować swoje oczekiwania w każdym wymiarze, tylko robi się to później. Piszemy na początku tak:
int[][] numbers = new int[A][];
gdzie za "A", podstawiamy liczbę tablic w tablicy, pisząc dosłownie. Teraz musimy podać konkretną liczbę dla drugiego wymiaru. Nie mogliśmy tego zrobić w tej samej linijce kodu, ponieważ tablice jakimi dysponuje tablica zagnieżdżona w języku C#, muszą być zainicjowane w taki sam sposób OSOBNO!!! Czyli zanim skorzystamy z naszej tablicy tablic, pętelka "for" i definicja każdej z podtablic:
for (int i = 0; i < numbers.Length; ++i)
{
numbers[i] = new int[B];
}
gdzie "B", oznacza liczbę komórek w każdej podtablicy, w przypadku tablic dwuwymiarowych. Gdyby to miała być tablica trójwymiarowa, sytuacja komplikuje się jeszcze bardziej :O:
int[][][] numbers = new int[A][][];
for (int z = 0; y < numbers.Length; ++z)
{
numbers[z] = new int[B][];
for (int y = 0; y < numbers[z].Length; ++y)
{
numbers[z][y] = new int[C];
}
}
Dopiero wtedy, po utworzeniu tablic i samej tablicy przechowującej swoje tablice, można programować samą obsługę :). Konieczność takiego rozbicia inicjalizacji na osobne pętle potrafi być korzystna w sytuacjach, w których nie da się ustalić z góry rozmiarów poszczególnych tablic i komórek w nich zawartych. Ponadto, tablica zagnieżdżona w języku C# może mieć nieregularne liczby elementów w każdym rzędzie! Sposoby posługiwania się tablicami nieregularnymi zostały zaprezentowane w kolejnej części opowieści o tablicach.
OBSŁUGA TABLICY ZAGNIEŻDŻONEJ
Spokojnie, ogólny kształt się nie zmienia, nadal trzymamy się zagnieżdżonych pętli, tylko teraz zamiast metody "GetLength", korzystamy z notacji indeksowej celem dostania się do podtablicy i z jej poziomu wykorzystujemy właściwość "Length" (więcej o właściwościach jest w odrębnym artykule). Mieliście okazję zobaczyć już ten zapis w powyższym przykładzie dotyczącym tablic trójwymiarowych:
numbers[i].Length
gdzie "i" oznacza indeks podtablicy. Przypominam, że skorzystanie z "Length" na samej nazwie tablicy jest interpretowane jak liczba tablic, a nie samych komórek! Dlatego jest potrzebna notacja indeksowa. A tak wyglądałby przykład na podsumowanie moich wywodów:
for (int y = 0; y < numbers.Length; ++y)
{
int rows = numbers[y].Length;
Console.Write("numbers[{0}] = ", y);
for (int x = 0; x < rows ; ++x)
{
numbers[y][x] = rows*y + x + 1;
Console.Write("{0} ", numbers[y][x]);
}
Console.WriteLine();
}
![]() |
Tablica zagnieżdżona to de facto "tablica tablic". Różni się rozmieszczeniem wartości od tablicy wielowymiarowej ukazanej w poprzednim artykule, stąd wymaga innego zaprogramowania obsługi.
Na tym artykuł o tablicy zagnieżdżonej w języku C# dobiegł końca. Od Was zależy którą drogą pójdziecie, jeśli chodzi o wybór rodzaju tablicy wielowymiarowej. Każdy z nich ma wady i zalety, jak wszystko w informatyce. Grunt to umieć zdecydować co będzie pasować lepiej do danej sytuacji ;).