Tablice vs. Listy w C#: jak przechowywać dane dynamicznie?

Tablice vs. Listy w C#: jak przechowywać dane dynamicznie?

W języku C# mamy różne sposoby przechowywania kolekcji danych. Najczęściej początkujący programiści zaczynają od tablic (array), ale szybko pojawia się pytanie: co zrobić, gdy nie znamy liczby elementów na starcie?

Problem z tablicami

Tablica w C# ma stały rozmiar. Musimy go podać w momencie tworzenia:

public City[] ReadFirstNCities(int nCities)
{
    City[] cities = new City[nCities];
    // ... wypełnianie tablicy
    return cities;
}

Jeśli z góry wiemy, że chcemy odczytać np. 7 miast – wszystko działa. Ale co jeśli chcemy wczytać wszystkie rekordy z pliku CSV i nie znamy ich liczby?

Przy tablicach to problem, bo:

  • musimy z góry znać rozmiar,
  • nie możemy go później zmienić,
  • dane są wczytywane stopniowo, więc nie da się przewidzieć końcowej liczby elementów.

Dlatego w takich przypadkach tablica nie jest najlepszym rozwiązaniem.


Rozwiązanie: List<T>

W takich scenariuszach używamy Listy (List<T>). Jest to dynamiczna kolekcja w .NET, która automatycznie zwiększa lub zmniejsza swój rozmiar w zależności od liczby elementów.

List<City> cities = new List<City>();

using (var reader = new StreamReader("cities.csv"))
{
    while (!reader.EndOfStream)
    {
        var line = reader.ReadLine();
        var city = new City(line);
        cities.Add(city); // dodajemy element bez martwienia się o rozmiar
    }
}

Zalety List<T>:

  • brak konieczności podawania rozmiaru z góry,
  • łatwe dodawanie i usuwanie elementów (Add, Remove, RemoveAt),
  • dostęp do elementów przez indeks jak w tablicy (cities[0]),
  • wsparcie dla LINQ (Where, OrderBy, Select).

Porównanie: kiedy używać tablic, a kiedy listy?

Tablice (T[])
✅ prostsze i szybsze przy stałej liczbie elementów (np. 12 miesięcy, 7 dni tygodnia)
❌ rozmiar musi być znany w momencie tworzenia

Listy (List<T>)
✅ dynamiczne dodawanie i usuwanie elementów
✅ wygodne w pracy z danymi z plików, baz danych, API
❌ minimalnie większy narzut wydajności niż tablica


Przykłady użycia List<T> w C#

Jeśli chcemy, aby lista stringów zawierała miesiące, deklarujemy zmienną jako Listę stringów.

List<string> months = new List<string>
{
    "January", "February", "March"
};
months.Add("April");

I będzie ona równa nowej liście stringów i zauważ, że nazwa typu, którego jest lista to string. Podobnie, gdybyśmy chcieli listę liczb całkowitych.

List<int> ints = new List<int>();

I innego typu listy.

List<double> double = new List<double>();
List<char> chars = new List<char>();

List<Person> people = new List<Person>();
people.Add(new Person("Jan", "Kowalski"));
people.Add(new Person("Anna", "Nowak"));

Po prawej stronie znaku równości widać standardową składnię konstruktora C#. Konstruktor nie ma parametrów, ponieważ w przeciwieństwie do tablicy, lista zawsze zaczyna swoje życie jako pusta. Musimy dynamicznie dodawać do niej elementy po utworzeniu jej.

Nazwa typu listy ma oczywiście inną składnię niż tablice, w których można by zobaczyć coś w rodzaju nawiasów kwadratowych, ponieważ tablice są częścią środowiska wykonawczego .NET i dlatego mają swoją własną specjalną składnię w języku C#.

Z drugiej strony lista jest zwykłym typem, a zatem jest zgodna z normalną składnią C# przy tworzeniu nowych obiektów.

Lista automatycznie rozszerza się i kurczy w zależności od zawartości.
Po utworzeniu obiektu listy możemy w łatwy sposób wstawiać elementy,
usuwać wybrane z dowolnego miejsca, podglądać ich zawartość,
a nawet przenosić z jednego miejsca w inne
.

Zasadniczo listy są bardziej elastyczne niż tablice,
ale tablice zwykle dają ci prostszy kod,
więc jako ogólną zasadę użyj listy zamiast tablicy tylko wtedy,
gdy jest to sytuacja, w której nie możesz użyć tablicy.

Podsumowanie

  • Tablice w C# mają stały rozmiar → dobre przy danych o znanej liczbie elementów.
  • List<T> to dynamiczna kolekcja → lepsza przy danych z plików, baz, API.
  • Listy oferują dodatkowe metody i integrację z LINQ.

👉 Jeśli chcesz nauczyć się pracy z kolekcjami w .NET (lista, tablica, stos, kolejka, słownik) i poznać dobre praktyki, sprawdź kurs:
https://dev-hobby.pl/kursy/c-wprowadzenie-do-kolekcji/

116 comments

  1. Wow! In the end I got a website from where I be capable of in fact get valuable information concerning my study and knowledge. Mimi Reinold Lionel

  2. Way cool! Some extremely valid points! I appreciate you penning this write-up and also the rest of the website is really good. Raquela Rowney Gino

  3. Thanks for your whole work on this website. My niece takes pleasure in working on research and it is simple to grasp why. We all notice all relating to the powerful ways you render vital tricks via your website and therefore welcome response from website visitors on this topic while our own simple princess is without question understanding so much. Take pleasure in the rest of the year. Your performing a very good job. Robina Peadar Darrin

  4. thanks Jill. I always wonder how insights into the making of writing are viewed, especially ones that draw on personal circumstances. Are they too immature? Should they be hidden from sight? But they help me understand not only the process of writing but the process of living, and how the two are connected. Pepita Travus Aholla

  5. Very informative information. I plan to share this with friends and family. I also plan to visit the web site you gave us. Really liked the picture of the hand reaching for the credit card! Nerte Delano Sherill

  6. Hurrah! After all I got a weblog from where I know how to truly take valuable facts regarding my study and knowledge. Christen Dukey Palermo

  7. Id have to examine with you here. Which is not one thing I usually do! I enjoy studying a submit that may make people think. Also, thanks for allowing me to comment! Malinda Ase Veleda

  8. Asking questions are genuinely pleasant thing if you are not understanding anything completely, except this post offers pleasant understanding yet.| Collen Roarke Samul

  9. Way cool! Some extremely valid points! I appreciate you writing this write-up and the rest of the website is very good. Vivia Lazar Burney

  10. Hi friends, how is the whole thing, and what you desire to say on the topic of this piece of writing, in my view its actually amazing for me. Nora Bradford Leake

  11. Thank you so much for sharing your experience with Wealthy Affiliate, and I wish you success with your business! Patty Sanders Luthanen

  12. I really appreciate this post. I have been looking all over for this! Thank goodness I found it on Bing. You have made my day! Thx again! Karel Micky Cavanaugh

  13. Everything is very open with a clear clarification of the issues. It was really informative. Your website is extremely helpful. Thanks for sharing! Enrichetta Richard Karly

  14. I have read a few good stuff here. Certainly worth bookmarking for revisiting. I wonder how much effort you put to create such a excellent informative site. Sukey Svend Karlin

  15. I like the helpful info you provide in your articles. I will bookmark your weblog and check again here regularly. Betsey Chance Ichabod

  16. Everything is very open with a very clear description of the issues. It was really informative. Your website is useful. Thank you for sharing! Kylen Jarret Niple

  17. Way cool! Some extremely valid points! I appreciate you writing this write-up plus the rest of the website is really good. Hilda Hamilton Diane-Marie

  18. Wszyscy uwielbiają, gdy ludzie spotykają się i dzielą przemyśleniami. Świetna strona internetowa, kontynuuj dobrą pracę!

  19. Wow, fantastyczny układ bloga! Jak długo blogujesz? dzięki tobie blogowanie wygląda na łatwe. Ogólny wygląd Twojej witryny internetowej jest świetny, podobnie jak zawartość!

  20. Sprawdzałem wiele twoich wpisów i muszę powiedzieć, że całkiem niezłe rzeczy. Na pewno dodam twoją stronę do zakładek.

  21. Czy nie masz nic przeciwko, jeśli zacytuję kilka Twoich postów, o ile podam informacje o autorach i źródłach z powrotem do Twojej witryny? Mój blog znajduje się dokładnie w tej samej niszy, co Twoja, a moi goście z pewnością skorzystaliby z wielu informacji, które tu podajesz. Daj mi znać, jeśli ci to odpowiada. Pozdrowienia!

  22. Dziś surfuję po sieci ponad 4 godziny, ale nigdy nie znalazłem interesującego artykułu takiego jak Twój. To jest dla mnie wystarczająco warte. Osobiście, jeśli wszyscy właściciele witryn i blogerzy stworzyli dobre treści, tak jak Ty, Internet będzie o wiele bardziej przydatny niż kiedykolwiek wcześniej.

  23. Cześć. Odkryłem Twoją witrynę za pośrednictwem Google, gdy szukałem podobnej sprawy, Twoja witryna pojawiła się. Wygląda na to, że jest dobra. Dodałem go do zakładek w moich zakładkach Google, aby ją odwiedzić.

  24. Chrystal Gregory Consuelo pisze:

    Zrobiłeś tam kilka fajnych uwag. Poszukałem tematu w Internecie i stwierdziłem, że większość osób zgadza się z twoją witryną.

  25. Melissa Christos Sheehan pisze:

    Lubię czytać post, który skłoni ludzi do myślenia. Dziękuję również za umożliwienie mi komentowania. Melissa Christos Sheehan

  26. Spółka to pomysłowy wynalazek, zwykle składa się jak kubistyczny obrazek, dla zapewnienia sobie indywidualnych zysków i uniknięcia odpowiedzialności, przez co urząd skarbowy ogarnia furia złości… 🙂 JAK NIE PŁACIĆ Podatków ? look this >> Raje Podatkowe Warto!

  27. We are a gaggle of volunteers and opening a brand new scheme in our community. You’ve performed an impressive task and our entire community will probably be thankful to you.

  28. https://advance-esthetic.us/blog/esthetician-and-med-spa-logo-design-ideas pisze:

    Artykuł jest inspirujący! Dzięki niemu mam ochotę eksperymentować i pogłębiać swoją wiedzę na ten temat

Dodaj komentarz