Tablice w C#: Jak wybrać element z kolekcji?
Praca z kolekcjami danych, takimi jak tablice, to codzienność każdego programisty C#. Jednym z najczęstszych zadań w pracy z kolekcjami w C# jest wybranie konkretnego elementu. Wydaje się to proste, ale kryje w sobie pułapkę, w którą wpadają początkujący – i nie tylko! Przykład: użytkownik podaje numer miesiąca, a program zwraca jego nazwę.
Czym jest indeks w tablicy?
Zanim przejdziemy do kodu, wyjaśnijmy kluczowe pojęcie. Każdy element w tablicy ma przypisany unikalny numer, który określa jego pozycję. Ten numer to indeks. Wyobraź sobie tablicę jako rząd ponumerowanych skrytek. Aby dostać się do zawartości konkretnej skrytki, musisz znać jej numer.
Najważniejsza zasada w C# (i wielu innych językach programowania) brzmi: indeksowanie tablic zaczyna się od zera!
- Pierwszy element ma indeks 0.
- Drugi element ma indeks 1.
- Trzeci element ma indeks 2.
- …i tak dalej, aż do ostatniego elementu, który ma indeks
długość_tablicy - 1
.
Zrozumienie tej zasady jest absolutnie kluczowe, aby unikać błędów.
Przykład kodu w C#
Stwórzmy prostą aplikację konsolową, która prosi użytkownika o podanie numeru miesiąca (od 1 do 12), a następnie wyświetla jego nazwę.
string[] monthsOfYear =
{
"Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec",
"Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"
};
Console.WriteLine("Podaj numer miesiąca (1-12):");
if (int.TryParse(Console.ReadLine(), out int month) && month >= 1 && month <= 12)
{
string chosenMonth = monthsOfYear[month - 1]; // -1, bo tablica jest indeksowana od zera
Console.WriteLine($"Wybrany miesiąc to: {chosenMonth}");
}
else
{
Console.WriteLine("Nieprawidłowy numer miesiąca. Podaj liczbę od 1 do 12.");
}
Co tu się dzieje?
- Deklarujemy tablicę
monthsOfYear
– zawiera ona wszystkie miesiące. - Odczytujemy dane od użytkownika przy pomocy
Console.ReadLine()
.
Zwracana wartość to zawszestring
, więc musimy ją skonwertować. - Używamy
int.TryParse
zamiastint.Parse
– to bezpieczniejsza wersja, która chroni przed błędami (np. gdy użytkownik wpisze tekst zamiast liczby). - Tablice w C# są indeksowane od zera, dlatego aby wybrać poprawny miesiąc, odejmujemy 1 (
month - 1
). - Dodajemy walidację zakresu – użytkownik nie może wpisać liczby mniejszej niż 1 lub większej niż 12.
Jak działa indeksowanie w tablicach?
Każdy element tablicy posiada swój indeks – numer pozycji:
- pierwszy element ma indeks
0
(np.monthsOfYear[0]
→ „Styczeń”), - drugi element ma indeks
1
(„Luty”), - ostatni element („Grudzień”) ma indeks
11
.
To oznacza, że jeśli użytkownik poda numer 3, musimy pobrać monthsOfYear[2]
. Właśnie dlatego w przykładzie występuje month - 1
.
Dlaczego warto znać to podejście?
- Tablice są uporządkowane – zawsze wiemy, który element kryje się pod danym indeksem.
- To najszybsza struktura danych w C# do przechowywania i odczytywania elementów.
- Zrozumienie indeksowania od zera to podstawa pracy z innymi kolekcjami: listami (
List<T>
), słownikami (Dictionary<TKey, TValue>
), kolejkami czy stosami.
Podsumowanie
- Tablice w C# zaczynają się od indeksu 0.
- Dostęp do elementów tablicy uzyskujemy za pomocą operatora indeksu [].
- Zawsze warto dodać walidację danych wejściowych.
int.TryParse
to lepszy wybór niżint.Parse
, bo pozwala uniknąć wyjątków.- Indeksowanie jest fundamentem dla wszystkich kolekcji w .NET.
- Próba odwołania się do indeksu spoza zakresu tablicy (np. mniejszego od 0 lub większego niż długość – 1) spowoduje błąd IndexOutOfRangeException.
Dostęp do elementów tablicy jest możliwy dzięki operatorowi indeksu.
string chosenMonth = monthsOfYear[month];
Pamiętaj, że tablice są indeksowane od zera!!!
Jeśli chodzi o tablice w C#, pierwszy element ma poprawnie numer 0 lub bardziej poprawnie indeks 0, a następnie drugi element jako indeks 1 i tak dalej.
To mam na myśli przez indeksowanie od zera!
Całościowe omówienie tematu kolekcji (tablica, lista, kolejka, stos, słownik). Wiele przydatnych wskazówek i dobrych praktyk dostępne jest na kursie:
https://dev-hobby.pl/kursy/c-wprowadzenie-do-kolekcji/
Brawo tak trzymać. Widać, że dbasz o merytoryczne wpisy na Twoim blogu, Dzięki i zapraszam do siebie…