Tablice wielowymiarowe i tablice zagnieżdżone (jagged arrays) to dwie różne konstrukcje pracy z kolekcjami w Visual Basic. Początkowo VB (VB6, .NET) obsługiwał tylko prostokątne (dwuwymiarowe, trójwymiarowe) tablice. Później w .NET dodano obsługę tablic zagnieżdżonych jako osobnego obiektu.
Tradycyjne tablice wielowymiarowe (np. Dim matrix(2,3) As Integer) są przydatne, gdy tabela danych musi być prostokątna. Tablice zagnieżdżone (jagged) wprowadzono w VB.NET z możliwością tworzenia nieregularnych wierszy: liczba elementów w wewnętrznej tablicy może być różna.
Niewłaściwy wybór podejścia prowadzi albo do nieefektywnego wykorzystania pamięci (np. w prostokątnych tablicach wszystkie wiersze są stałe), albo do niepoprawnej logiki dostępu do elementów (możliwe jest wystąpienie błędu poza zakresem). Często mylony jest składnia i sposoby inicjalizacji.
Prostokątne (multidimensional) tablice wybiera się, jeśli zawartość jest zawsze pełna (np. pole gry). Tablice zagnieżdżone — gdy wiersze mają różną długość (np. listy uczniów w różnych klasach). Dostęp do elementów między nimi różni się.
Przykład kodu:
' Tablica wielowymiarowa Dim rect(1, 2) As Integer ' 2 wiersze, 3 kolumny (indeksacja od zera) rect(0,0) = 1 : rect(0,1) = 2 : rect(0,2) = 3 rect(1,0) = 4 : rect(1,1) = 5 : rect(1,2) = 6 ' Tablica zagnieżdżona Dim jagged(2)() As Integer ' tablica składająca się z 3 elementów, z których każdy jest tablicą jagged(0) = New Integer() {1, 2} jagged(1) = New Integer() {3, 4, 5} jagged(2) = New Integer() {6} Console.WriteLine(rect(1,2)) ' 6 Console.WriteLine(jagged(1)(2)) ' 5
Kluczowe cechy:
Czy można zdefiniować tablicę zagnieżdżoną za pomocą Dim a(2,3) As Integer?
Odpowiedź: Nie, to stworzy tablicę prostokątną. Tablice zagnieżdżone definiuje się w ten sposób: Dim a(2)() As Integer lub Dim a As Integer()().
Co się stanie, jeśli nie zainicjalizujesz wewnętrznej tablicy struktury zagnieżdżonej, a spróbujesz uzyskać dostęp do elementu?
Odpowiedź: Wyrzucone zostanie wyjątek NullReferenceException, ponieważ wewnętrzna tablica nie została utworzona.
Czym różni się składnia uzyskiwania długości wymiaru jednowymiarowej tablicy i tablicy zagnieżdżonej?
Odpowiedź: Dla prostokątnej: a.GetLength(0) (liczba wierszy), a.GetLength(1) (liczba kolumn). Dla zagnieżdżonej: a.Length (liczba wierszy), a(i).Length (liczba elementów w wierszu i).
Dla przechowywania listy uczniów według klas wybrano tablicę prostokątną (10, 30) — puste elementy nie są wykorzystywane, część klas ma mniej uczniów niż maksymalna liczba.
Zalety:
Wady:
Używana jest tablica zagnieżdżona: każda wewnętrzna tablica to rzeczywista lista uczniów klasy, optymalizacja pamięci i prostota przetwarzania.
Zalety:
Wady: