LEKCJA 6 – Tablice w języku C#

W poprzednich lekcjach nauczyliśmy się korzystać ze zmiennych, ale były to pojedyncze zmienne, które przedstawiały pojedynczą rzecz. Teraz czas pójść o krok dalej i poznać tablice, które służą do przechowywania kolekcji, czyli większej ilości zmiennych. Nie jestem sobie w stanie wyobrazić programowania bez kolekcji takich jak tablice, listy czy słowniki ponieważ w czasie tworzenia aplikacji biznesowych korzystamy z nich bez przerwy.

Jeśli czytasz tę lekcję to jest duża szansa, że za jakiś czas weźmiesz udział w rozmowach kwalifikacyjnych na stanowisko programisty .NET. Proponuję, żebyśmy omówili szybko kilka najważniejszych zagadnień. Każde z tych zagadnień może pojawić się na rozmowie kwalifikacyjnej, więc czytaj dalej.

Co to jest tablica?

Tablica jest zbiorem elementów tego samego typu, które możemy przechowywać w jednym miejscu w pamięci i używać do tego celu jednej zmiennej.

Przykład: Wyobraź sobie, że jesteś już programistą .NET w spółdzielni mieszkaniowej. Twój szef prosi Cię żebyś napisał program, który ma za zadanie odczytać z bazy danych listę wszystkich lokatorów a następnie obliczyć sumę czynszu.

Jak podejść do takiego problemu? Na pewno musimy w programie przechowywać liczby. Z pomocą przychodzą właśnie tablice. Za chwile stworzymy tablicę, odczytamy z niej jeden element, a potem wszystkie elementy.

Jak stworzyć tablicę przechowująca liczby?

Tablice deklarujemy w następujący sposób:

        static void Main(string[] args)
        {
            int[] rent = { 150, 190, 224, 491, 112, 221 };
        }

Jak widzisz zadeklarowaliśmy tablicę o nazwie rent (czyli po angielsku czynsz). Tablica ta będzie przechowywać liczby całkowite czyli int. Zauważmy, że do deklaracji tablicy użyliśmy nawiasów kwadratowych. Dzięki temu kompilator będzie wiedział, że chodzi o tablicę liczb a nie pojedynczą liczbę.

Nasza tablica przechowuje listę wartości liczbowych, czyli: 150, 190, 224, 491, 112, 221.

WSKAZÓWKA: 
zasada numer 1 w programowaniu - zmienne, klasy, metody nazywamy po angielsku.

Jak wyświetlić pierwszy element z tablicy?

Elementy z tablicy odczytujemy również za pomocą nawiasów kwadratowych.

        static void Main(string[] args)
        {
            int[] rent = { 150, 190, 224, 491, 112, 221 };
            int firstValue = rent[0];
            Console.WriteLine(firstValue);
        }

Jak widać możemy ze zmiennej rent odczytać pierwszy element podając indeks 0. Liczbę między nawiasami nazywamy indeksem tablicy. Jeśli się przyjrzymy to można się zastanawiać dlaczego pierwszy element tablicy znajduje się na pozycji 0? Jest tak dlatego, że generalnie w każdym języku programowania, którego używałem elementy tablicy numerujemy nie od 1 ale od 0. Zatem zgodnie z zasadą numeracji od zera:

  • pierwszy element tablicy to rent[0]
  • drugi element tablicy to rent[1]
  • trzeci element tablicy to rent[2]
  • itd…
ZAPAMIĘTAJ: 
Indeksy tablicy w języku C# zaczynają się od 0, a nie od 1. 

Jak sprawdzić rozmiar istniejącej tablicy?

Każda tablica posiada właściwość o nazwie Length. Więc jeśli nasza tablica nazywa się rent, to jej rozmiar możemy uzyskać dzięki konstrukcji: rent.Length

        static void Main(string[] args)
        {
            int[] rent = { 150, 190, 224, 491, 112, 221 };
            Console.WriteLine(rent.Length);
        }

Jak wyświetlić wszystkie elementy tablicy?

Istnieje kilka sposobów żeby wyświetlić wszystkie elementy tablicy:

  • pętla for
  • pętla while
  • pętla foreach

Zobaczmy najpierw jak wygląda pętla for:

        static void Main(string[] args)
        {
            int[] rent = { 150, 190, 224, 491, 112, 221 };

            for (int i = 0; i < rent.Length; i++)
            {
                Console.WriteLine(rent[i]);
            }
        }

Jak pewnie już widzisz wykorzystujemy tu rozmiar tablicy, czyli rent.Length. Pętla for jest bardzo popularna w programowaniu ale mało wygodna ze względu na konieczność używania indeksu. Trzeba przy tym pamiętać, że początkowa wartość to 0 oraz, że po każdej iteracji pętli for zwiększamy wartość zmiennej i o jeden (a robi to instrukcja inkrementacji czyli: i++). Dużo rzeczy, które trzeba zapamiętać.

Na szczęście istnieje łatwiejszy sposób aby przejść przez wszystkie elementy tablicy. Jest to pętla foreach.

        static void Main(string[] args)
        {
            int[] rent = { 150, 190, 224, 491, 112, 221 };

            foreach (int value in rent)
            {
                Console.WriteLine(value);
            }
        }

Jak posortować tablicę w rosnącej kolejności?

To również typowe pytanie rekrutacyjne, które może się przydać. Dobra wiadomość jest taka, że nie trzeba budować skomplikowanych algorytmów sortowania, które porównują ze sobą po kolei wszystkie elementy tablicy. Mamy do dyspozycji metodę Array.Sort(), która przyjmuje jeden parametr, którym jest tablica do posortowania. Zauważmy, że ta metoda zmieni kolejność elementów w tablicy.

    static void Main(string[] args)
    {
        int[] rent = { 150, 190, 224, 491, 112, 221 };
        Array.Sort(rent);

        foreach (int value in rent)
        {
            Console.WriteLine(value);
        }
    }

Zadanie dla Ciebie

Wróćmy do naszego przykłądu:

Wyobraź sobie, że jesteś już programistą .NET w spółdzielni mieszkaniowej. Twój szef prosi Cię żebyś napisał program, który ma za zadanie odczytać z bazy danych listę wszystkich lokatorów a następnie obliczyć sumę czynszu.

Teraz jesteś już w stanie samodzielnie rozwiązać to zadanie. Spróbuj zrobić to zadanie samodzielnie. Jeśli za 5 minut będziesz mieć problem z wykonaniem go to przygotowałem dla Ciebie kilka wskazówek:

  1. Możesz wykorzystać pętle for albo foreach.
  2. Będziesz potrzebować dodatkowej zmiennej do przechowywania sumy (nazwijmy ją sum – pamiętaj o zasadzie nazewnictwa w języku angielskim).
  3. W każdej iteracji pętli powinieneś powiększyć wartość zmiennej sum. Jeśli używasz pętli for to możesz to zrobić tak: sum = sum+rent[i], natomiast w przypadku pętli foreach może to wyglądać mniej więcej tak: sum = sum + rentValue.
  4. Na samym końcu wyświetl zawartość zmiennej sum.