W C# występują tablice wzorowane na tych jakie znamy z
Javy,
ale jest też specjalny typ wielowymiarowych
tablic — tablice prostokątne, bliższe
tablicom z C czy Fortranu. Omówimy pokrótce te typy na przykładzie
poniższego programu:
1. using System;
2.
3. class Tablice {
4. public static void Main() {
5. string[] names =
6. new string[] { "Ola", "Ala", "Ula" };
7. int[,] wzrwag = new int[3,2];
8. int[][] stopnie = new int[3][];
9.
10. for (int i =0; i < 3; i++) {
11. wzrwag[i,0] = 168 + i;
12. wzrwag[i,1] = 68 - 2*i;
13. }
14.
15. stopnie[0] = new int[] {4,4,4,5};
16. stopnie[1] = new int[] {4,5};
17. stopnie[2] = new int[] {3,4,3};
18.
19. Console.WriteLine("Imie Wzrost Waga Stopnie\n"+
20. "------------------------");
21. for (int i = 0; i < names.Length; i++) {
22. Console.Write(names[i] + " " + wzrwag[i,0] +
23. " " + wzrwag[i,1] + " ");
24. for (int j = 0; j < stopnie[i].Length; j++)
25. Console.Write(" " + stopnie[i][j]);
26. Console.WriteLine();
27. }
28. }
29. }
string[] names = new string[] { "Ola", "Ala", "Ula" };
ma postać
tablicy z Javy: jest to trzyelementowa tablica odnośników
do napisów (zainicjowana odnośnikami do konkretnych napisów
podanych w postaci literałów).
W linii 8 deklarujemy tablicę dwuwymiarową liczb,
stopnie,
int[][] stopnie = new int[3][];która, jak w Javie, jest w zasadzie jednowymiarową tablicą o elementach stopnie[0], stopnie[1], stopnie[2], z których każdy jest odnośnikiem do tablicy liczb. Zaraz po utworzeniu w linii 8 ta jednowymiarowa tablica inicjowana jest wartościami NULL. W liniach 15-17 programu
stopnie[0] = new int[] {4,4,4,5};
stopnie[1] = new int[] {4,5};
stopnie[2] = new int[] {3,4,3};
tworzymy tablice liczb (różnych rozmiarów) i odnośniki
do nich wpisujemy do elementów
stopnie[0],
stopnie[1],
stopnie[2]
tablicy
stopnie.
Zatem do poszczególnych ocen zapisanych w tablicy będziemy
się odnosić poprzez podanie dwóch indeksów, każdy w osobnej
parze nawiasów kwadratowych. Widać to na przykład w linii 25.
Tego rodzaju tablica, jak w Javie, może mieć wiersze
różnej długości (czyli być „postrzępiona”,
ang. jagged array).
Nie ma też żadnej gwarancji, że dane
odpowiadające poszczególnym wierszom będą ułożone
w pamięci w jakiś określony sposób — każdy wiersz może być
alokowany osobno.
Charakterystyczna dla C# jest konstrukcja użyta w linii 7 programu
int[,] wzrwag = new int[3,2];Deklarujemy tu liczbową tablicę prostokątną o wymiarach 3×2. Jest ona odpowiednikiem tablic z Fortranu czy C: musi być ściśle prostokątna, tzn. długości wierszy muszą być równe. Cała tablica jest alokowana w spójnym obszarze pamięci w dobrze określonym porządku (wierszami, jak w C, a nie kolumnami, jak w Fortranie). Znacznie zwiększa to efektywność przetwarzania danych zawartych w tablicach w stosunku do Javy.
Widać z naszego przykładu, że takie tablice oznaczane są w specjalny sposób: indeksy umieszcza się w jednej parze nawiasów kwadratowych, oddzielone przecinkami (patrz linie 7, 11, 12, 22, i 23 programu).
Wynik programu to:
Imie Wzrost Waga Stopnie
------------------------
Ola 168 68 4 4 4 5
Ala 169 66 4 5
Ula 170 64 3 4 3
Jak widzimy, język C# daje nam dużą swobodę i elastyczność
w posługiwaniu się tablicami — wspierane są zarówno tablice
"w stylu Javy” jak i te znane z C czy Fortranu.
T.R. Werner, 21 lutego 2016; 20:17