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 3Jak 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