Listy są bardzo podobne do tablic, ale w przeciwieństwie do nich można swobodnie zmieniać ich rozmiar — List<T> automatycznie rośnie i kurczy się wraz z zawartością. Podstawowe operacje (Add, Insert, Remove, wyszukiwanie) omawiamy w osobnych artykułach: Dodawanie elementów do List<T> i wstawianie, wyszukiwanie i usuwanie. Tutaj skupiamy się na tym, co dzieje się poza pojedynczymi operacjami — jak sortować, filtrować masowo i przekształcać listy w praktycznych scenariuszach.
Sortowanie listy
List<T> ma wbudowaną metodę Sort(), która sortuje elementy w miejscu (modyfikuje oryginalną listę):
var liczby = new List<int> { 5, 2, 8, 1, 9 };
liczby.Sort();
// [1, 2, 5, 8, 9]
var miasta = new List<string> { "Kraków", "Gdańsk", "Białystok" };
miasta.Sort((a, b) => a.Length.CompareTo(b.Length)); // sortowanie po długości nazwyJeśli nie chcesz modyfikować oryginalnej listy, użyj LINQ — OrderBy() zwraca nową posortowaną sekwencję:
var posortowane = miasta.OrderBy(m => m).ToList(); // oryginalna lista `miasta` bez zmianMasowe filtrowanie i usuwanie — RemoveAll
Zamiast iterować ręcznie i usuwać elementy pojedynczo (co jest ryzykowne podczas iteracji — patrz artykuł o foreach), RemoveAll usuwa wszystkie elementy spełniające warunek w jednym wywołaniu:
var zamowienia = new List<Zamowienie> { /* ... */ };
// Usuwa wszystkie anulowane zamówienia, zwraca liczbę usuniętych
int usuniete = zamowienia.RemoveAll(z => z.Status == "Anulowane");Do filtrowania bez modyfikacji oryginału użyj LINQ Where():
var aktywne = zamowienia.Where(z => z.Status == "Aktywne").ToList();Operacje wsadowe — AddRange i InsertRange
Gdy dodajesz wiele elementów naraz, AddRange jest zarówno czytelniejszy, jak i wydajniejszy niż pętla z pojedynczymi Add — pozwala liście od razu zaalokować odpowiednią pojemność zamiast rozszerzać ją stopniowo:
var nowMiasta = new List<string> { "Poznań", "Łódź" };
miasta.AddRange(nowMiasta);
// InsertRange — wstawia całą kolekcję w konkretnym miejscu
miasta.InsertRange(0, new[] { "Warszawa" });Konwersja między List<T> a tablicą
// Lista → tablica
int[] tablica = liczby.ToArray();
// Tablica → lista
List<int> zTablicy = new List<int>(tablica);
// albo, od C# 12, przez collection expression:
List<int> zTablicy2 = [.. tablica];To przydaje się, gdy API biblioteki zewnętrznej oczekuje tablicy, a Twój kod operuje na liście (lub odwrotnie) — konwersja jest tania (O(n)), ale nie darmowa, więc nie rób jej bez potrzeby w gorącej ścieżce wykonania.
Praktyczne scenariusze
- Koszyk zakupowy — dynamicznie rosnąca lista produktów, z częstym dodawaniem na końcu i sporadycznym usuwaniem konkretnej pozycji.
- Historia cofania (undo) — lista kolejnych stanów aplikacji, z których najczęściej odczytujesz ostatni element (choć do tego czystszym wyborem bywa Stack<T>, jeśli naprawdę potrzebujesz wyłącznie LIFO).
- Wyniki wyszukiwania/filtrowania — lista budowana raz jako wynik zapytania LINQ (
.Where(...).ToList()), potem tylko odczytywana. - Bufor danych do przetworzenia wsadowego — zbierasz elementy metodą
Addaż osiągniesz określony rozmiar paczki, potem przetwarzasz i czyścisz (Clear()).
Wspólny mianownik tych scenariuszy: dominują operacje na końcu listy (dodawanie, czasem odczyt ostatniego elementu) albo pełne przejście po wszystkich elementach. Gdy zaczynasz często wstawiać lub usuwać elementy ze środka czy początku dużej listy, warto sprawdzić, czy List<T> to wciąż dobry wybór — szczegóły w artykule o wydajności listy.
FAQ
Czy Sort() i OrderBy() dają ten sam wynik?
Efekt końcowy (kolejność elementów) tak, ale Sort() modyfikuje listę w miejscu i zwraca void, a OrderBy() z LINQ zwraca zupełnie nową sekwencję, zostawiając oryginał bez zmian. Wybór zależy od tego, czy chcesz zachować oryginalną kolejność gdzie indziej w kodzie.
Czy AddRange jest szybsze niż pętla z Add?
Tak, zwłaszcza dla dużej liczby elementów — AddRange może od razu obliczyć potrzebną pojemność i zaalokować pamięć raz, zamiast rozszerzać tablicę wewnętrzną wielokrotnie w trakcie pętli.
🚀 Co dalej?
Zobacz to w praktyce na wideo i pobierz darmową roadmapę, żeby ułożyć naukę w spójną ścieżkę do pierwszej pracy.
- 🗺️ Pobierz darmową roadmapę Junior .NET Developer — 12 kroków od podstaw C# do pierwszej pracy: dev-hobby.pl
- 🎬 Subskrybuj kanał YouTube — nowe filmy co tydzień.
94 comments
Dodaj komentarz
Musisz się zalogować, aby móc dodać komentarz.
Zamień wiedzę w umiejętności
Pobierz darmową Roadmapę .NET i ułóż takie tematy jak ten w spójną ścieżkę do pierwszej pracy.
Pobieram roadmapę →
Dramatem zycia jest to, ze starzejemy sie zbyt szybko, a madrzejemy zbyt plzno. – Benjamin Franklin
dzięki
You have brought up a very good details, thankyou for the post. Rosemarie Eldin Havard
thanks
You made some decent points there. I looked on the internet for the issue and found most individuals will go along with with your website. Austina Boycey Minta
thanks
Unbelievably alluring knowledge you have stated, thanks a lot for writing. Tobe Tripp Avan
thanks
Excellent article! We will be linking to this particularly great content on our website. Keep up the good writing. Sileas Dino Pentheas
thanks
Top dissertation conclusion writer websites for masters . Mavra Andres Weinrich
thanks
Eye-catching component of content. I simply stumbled upon your web web page and in accession capital to assert that I acquire in fact loved account your web log posts. Any method I will end up being subscribing in your feeds or also I achievements you get proper of entry to frequently quickly. Waneta Nels Cassaundra
thanks
Great blog. Really looking forward to read more. Really Cool. Theodosia Brade Mackler
thanks
May I simply say what a relief to discover someone that actually understands what they are talking about online. You definitely realize how to bring a problem to light and make it important. More and more people have to check this out and understand this side of your story. I was surprised you are not more popular given that you certainly possess the gift. Terra Stevy Socrates
thanks
Greetings! Very helpful advice in this particular article! It is the little changes that will make the greatest changes. Many thanks for sharing! Aurilia Tomas Barkley
thanks
Greetings! Very helpful advice in this particular post! Tillie Wesley Buehrer
thanks
Hello, I read your new stuff on a regular basis. Your humoristic style is awesome, keep up the good work!| Caritta Yulma Ancell
thanks
Hello! I simply wish to offer you a huge thumbs up for the great info you have got right here on this post. I am coming back to your site for more soon. Noell Warde Neila
thanks
you have a fantastic weblog right here! would you prefer to make some invite posts on my weblog? Shane Xavier Hyacinth
yes, pleas
Super-Duper site! I am loving it!! Will come back again. I am taking your feeds also. Arabelle Ozzy Tarrant
thanks
I loved your article. Really looking forward to read more. Really Great. Cordi Emmott Ziwot
thanks
Do you mind if I quote a few of your articles as long as I provide credit and sources back to your weblog? My blog site is in the exact same area of interest as yours and my visitors would definitely benefit from some of the information you present here. Please let me know if this alright with you. Thank you! Fran Halsey Barclay
thanks
Your style is unique compared to other people I have read stuff from. I appreciate you for posting when you have the opportunity, Guess I will just bookmark this web site. Dolly Saxe Eckel
thanks
Maintain your control, and keep repeating this process. Matti Huntington Nate
thanks
Wow, this paragraph is pleasant, my younger sister is analyzing these kinds of things, so I am going to inform her.| Gertrud Hammad Terrene
thanks
Muchos Gracias for your blog post. Really thank you! Fantastic. Rochell Samson Layman
thanks
These are genuinely fantastic ideas in on the topic of blogging. You have touched some pleasant factors here. Any way keep up wrinting.| Ashlie Horatius Hewitt
thanks
Im obliged for the article. Really thank you! Really Great. Noelyn Lars Marthe
thanks
Hello. splendid job. I did not imagine this. This is a excellent story. Thanks! Gloria Eberhard Flessel
thanks
Aqua Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Barbee Upton Hayden
thanks
Hi my friend! I want to saay that this article is awesome, nice written and come with almoost all important infos. Viviana Sterne Gannes
thanks
This is my first time go to see at here and i am truly pleassant to read all at alone place. Tedda Poul Rockie
thanks
Everyone loves it whenever people come together and share ideas. Great blog, stick with it! Florentia Raimundo Dulcy
thanks
Witam. Znalazłem Twoją witrynę za pomocą Google, nawet gdy szukałem podobnej sprawy, Twoja witryna pojawiła się. Wygląda dobrze. Dodałem go do zakładek w moich zakładkach Google, aby go odwiedzić.
dzieki
To musi być jeden z moich ulubionych postów! A do tego jest to bardzo pomocny temat dla początkujących. bardzo dziękuję za informację!
dzieki
Bardzo fajny post. Zdecydowanie doceniam tę stronę. Tak trzymaj!
dzieki
good jobbbbb
thanks
good job!
thanks
Świetnie! Kilka bardzo ważnych punktów! Dziękuję za napisanie tego artykułu, a reszta strony jest naprawdę dobra.
dzieki
Po przejrzeniu kilku artykułów na Twoim blogu, bardzo podoba mi się Twoja technika pisania bloga. Dodałem to do zakładek do mojej listy stron z zakładkami i będę sprawdzać w najbliższej przyszłości. Zonnya Saxe Erfert
dzieki
Czlowiek, ktory w wieku piecdziesieciu lat widzi swiat tak samo, jak widzial go majac dwadziescia lat, zmarnowal trzydziesci lat zycia. – Muhammad Ali
Wiecie kim jest prawdziwy intelektualista? To ktos, kto znalazl cos bardziej interesujacego niz kobialki… 🙂
Czlowiek, ktory w wieku piecdziesieciu lat widzi swiat tak samo, jak widzial go majac dwadziescia lat, zmarnowal trzydziesci lat zycia. – Muhammad Ali
Bardzo mi się podoba, jak analizujesz trendy w [dziedzinie]. To dodaje wartości Twoim wpisom
Zycie nie jest sprawiedliwe i byc moze to dobra wiadomosc dla wiekszosci z nas. – Oscar Wilde
Bardzo doceniam praktyczne wskazówki, zwłaszcza te oparte na własnym doświadczeniu
Twój artykuł jest jak mała skarbnica wiedzy. Dzięki za podzielenie się z nam
Najtrudniejsza rzecz w zyciu to nauczyc sie, ktore mosty przekraczac, a ktore palic. – David Russell
Fajnie, że poruszasz nie tylko techniczne aspekty, ale także kwestie związane z najlepszymi praktykami i rozwojem zawodowym. To dodatkowa wartość dla czytelników
Chętnie bym zobaczył porównanie z innymi frameworkami/językami programowania
Dzięki za podzielenie się swoimi doświadczeniami. To motywuje do dalszego rozwoj
Podoba mi się, jak zaczynasz od podstaw, co pomaga zrozumieć nawet trudniejsze koncepcje
Bardzo doceniam praktyczne przykłady, które dodajesz. To naprawdę pomaga zrozumieć omawiane koncepcje
Dzięki za podzielenie się swoją wiedzą! Zawsze warto dowiedzieć się czegoś nowego i zastosować to w swoich projektach.
Ciekawe podejście do tematu. Chętnie bym zobaczył więcej artykułów na ten temat
Cieszę się, że poruszyłeś ten temat. Jestem pewien, że wielu programistów zyska na tym artykule
Super wpis! Cieszę się, że podzieliłeś się swoją wiedzą na ten temat
Dobrze napisane! Zauważyłem/ałem, że opisujesz zarówno zalety, jak i wady, co sprawia, że artykuł jest bardziej wyważony.