CodeGym /Kursy /C# SELF /Tablice dwuwymiarowe

Tablice dwuwymiarowe

C# SELF
Poziom 7 , Lekcja 4
Dostępny

1. Wprowadzenie

Wyobraź sobie zwykłą tablicę jako długie pudełko po pizzy, gdzie wszystkie kawałki leżą w jednym rzędzie — smacznie, ale trochę nudno.

A teraz pomyśl o grafiku pracy albo szachownicy. Tam wszystko jest już zorganizowane w wiersze i kolumny — czyli w tabelę. To właśnie klasyczne zadanie dla tablicy dwuwymiarowej.

W prawdziwym życiu tablice dwuwymiarowe spotykasz na każdym kroku:

  • Tabele z wypłatami pracowników (wiersze — pracownicy, kolumny — miesiące).
  • Obrazek na ekranie (każde "pole" — kolor piksela, dwie współrzędne: X i Y).
  • Obliczenia macierzowe i przetwarzanie danych.
  • Szachownica albo plansza do kółko-krzyżyk.

Czasem tablicę dwuwymiarową nazywa się macierzą (to określenie przyszło z matematyki).

Jest mnóstwo miejsc, gdzie jako programista możesz potrzebować tablicy dwuwymiarowej. Realizacja praktycznie każdej gry planszowej — to gotowa tablica dwuwymiarowa: „Szachy”, „Warcaby”, „Kółko-Krzyżyk”, „Statki”:

Tablice dwuwymiarowe 2

Plansza do „Szachów” albo „Statków” jest tak zrobiona, że idealnie pasuje do tablicy dwuwymiarowej, gdzie jako współrzędne pól używasz po prostu liczb. Nie „pionek e2 → e4”, tylko „pionek (4,1) → (4,3)”. Tak programiście jest nawet łatwiej.

2. Składnia deklaracji tablic dwuwymiarowych

Straszne tylko do pierwszej deklaracji! Rozkminiamy krok po kroku.

Ogólna zasada

typ[,] nazwaTablicy;
Deklaracja tablicy dwuwymiarowej

Tutaj przecinek , w nawiasach — to nie błąd kompilatora po nocy z kawą, tylko wskazanie: tablica jest dwuwymiarowa.

Przykłady

int[,] macierz;
double[,] tabelaOcen;
string[,] szachownica;

Tworzenie tablicy

Podajemy rozmiary: ilość wierszy i kolumn.

macierz = new int[3, 4]; // 3 wiersze, 4 kolumny

To tabelka 3x4: wyobraź sobie tabelę w Excelu z 3 wierszami i 4 kolumnami.

Można od razu zadeklarować zmienną i stworzyć tablicę dwuwymiarową:

int[,] macierz = new int[3, 4];

Można też od razu zainicjalizować wartościami (prawie jak z jednowymiarową):

int[,] przyklad = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
// Tabela 3 wiersze, 3 kolumny
Inicjalizacja tablicy dwuwymiarowej wartościami

Ważne: WSZYSTKIE wiersze przy takiej inicjalizacji muszą mieć tę samą długość. Nie można zrobić pierwszego wiersza z 3 elementów, a drugiego — z 2.

Schemat wizualny

┌─────┬─────┬─────┬─────┐
│  0  │  1  │  2  │  3  │  ← kolumny (Columns)
├─────┼─────┼─────┼─────┤
│ 0,0 │0,1  │0,2  │0,3  │  ← wiersz 0 (Row 0)
├─────┼─────┼─────┼─────┤
│ 1,0 │1,1  │1,2  │1,3  │  ← wiersz 1 (Row 1)
├─────┼─────┼─────┼─────┤
│ 2,0 │2,1  │2,2  │2,3  │  ← wiersz 2 (Row 2)
└─────┴─────┴─────┴─────┘

Każdy element określasz parą indeksów [wiersz, kolumna].

3. Indeksowanie i dostęp do elementów

W tablicy dwuwymiarowej, żeby dostać się do elementu, podajesz dwa indeksy:

  • Pierwszy — numer wiersza
  • Drugi — numer kolumny

macierz[1, 2] = 99;  // W drugim wierszu (indeks 1), trzecia kolumna (indeks 2)
Przypisanie wartości elementowi tablicy dwuwymiarowej

Jeśli ktoś jest przyzwyczajony do szachów, przypominam: indeksowanie zaczyna się od zera. Czyli pierwszy element to [0, 0].

Zapis i odczyt

int[,] dane = new int[5, 2];
dane[1, 1] = 5;         // zapis
int wartosc = dane[1, 1]; // odczyt

Tak to wygląda w pamięci:

Tablice dwuwymiarowe

4. Wypełnianie tablicy dwuwymiarowej

Napiszmy kod, który wypełni macierz kolejnymi liczbami od 1 do 12, żeby było jasne, jak to działa.

int[,] macierz = new int[3, 4];
int wartosc = 1;

for (int wiersz = 0; wiersz < 3; wiersz++)
{
    for (int kol = 0; kol < 4; kol++)
    {
        macierz[wiersz, kol] = wartosc;
        wartosc++;
    }
}
Wypełnianie tablicy dwuwymiarowej liczbami po kolei

Tutaj zewnętrzna pętla przechodzi po wierszach, a wewnętrzna — po kolumnach.

Ilustracja:

Po wykonaniu:
┌────┬────┬────┬────┐
│ 1  │ 2  │ 3  │ 4  │
├────┼────┼────┼────┤
│ 5  │ 6  │ 7  │ 8  │
├────┼────┼────┼────┤
│ 9  │10  │11  │12  │
└────┴────┴────┴────┘

5. Wymiary: pobieranie liczby wierszy i kolumn

Często rozmiary tablicy trzeba poznać "w locie". W C# do tego jest wygodna metoda GetLength().

int[,] macierz = new int[3, 4];

int wiersze = macierz.GetLength(0);    // liczba wierszy (pierwszy wymiar) - 3
int kolumny = macierz.GetLength(1); // liczba kolumn (drugi wymiar) - 4

Console.WriteLine($"Wierszy: {wiersze}, Kolumn: {kolumny}");
Uwaga:

nie myl z Length — w tablicy dwuwymiarowej to ogólna liczba wszystkich elementów (wiersze × kolumny).

6. Wyświetlanie tablicy dwuwymiarowej na ekranie

Do wyświetlania tabeli dwuwymiarowej zwykle używa się podwójnej pętli — i to trochę jak rysowanie labiryntu w konsoli. Przykład:

for (int wiersz = 0; wiersz < macierz.GetLength(0); wiersz++)
{
    for (int kol = 0; kol < macierz.GetLength(1); kol++)
    {
        Console.Write(macierz[wiersz, kol] + "\t"); // "\t" — tabulacja dla estetyki
    }
    Console.WriteLine(); // przejście do nowego wiersza
}

Przykład wyjścia:

1	2	3	4	
5	6	7	8	
9	10	11	12	

Przy okazji, właśnie nauczyłeś się ładnie "rysować" tabele za pomocą kilku linijek kodu!

7. Tablice wielowymiarowe

I jeszcze jeden ciekawy fakt o tablicach, o którym pewnie już się domyślasz. Skoro można zrobić tablicę dwuwymiarową, to można też trójwymiarową?

Tak, można stworzyć tablicę dowolnej liczby wymiarów. Takie tablice nazywamy wielowymiarowymi.

Jak deklarować tablice wielowymiarowe

Wystarczy po prostu podać odpowiednią liczbę wymiarów, oddzielając je przecinkami:

int[,,,] macierz = new int[2, 3, 4, 5];
Deklaracja tablicy czterowymiarowej

Tutaj mamy tablicę czterowymiarową:

  • 2 elementy po pierwszej współrzędnej,
  • 3 — po drugiej,
  • 4 — po trzeciej,
  • 5 — po czwartej.

W pamięci taka tablica to jeden wielki “sześcian” danych, upakowany po kolei.

Jak odwoływać się do elementów

Dostęp do elementu odbywa się przez wszystkie indeksy naraz:

macierz[0, 1, 2, 3] = 42;
int wartosc = macierz[1, 2, 0, 4];
  • Indeksy zaczynają się od zera, jak zawsze w C#.
  • W takiej tablicy będzie 2 × 3 × 4 × 5 = 120 elementów.

Praktyczne przykłady tablic wielowymiarowych

  • 2D — tabele, szachownice, obrazy.
  • 3D — “kostki” w grafice komputerowej, dane do obliczeń naukowych (np. temperatura w różnych punktach przestrzeni i czasu).
  • 4D i wyżej — rzadko używane, ale spotykane w zaawansowanej matematyce, symulacjach, machine learningu itd.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION