Listy – List

3) List<T>

W ostatnim rozdziale napisałem kod, który odczytuje pierwsze 7 miast z pliku CSV, ale co się stanie, jeśli chcę odczytać wszystkie kraje z pliku CSV?

Czy możemy to zrobić?
Cóż, jest problem. Spójrz na kod w metodzie ReadFirstNCitys, która tworzy instancję tablicy do przechowywania miast. Tworzę tablicę, mówię, jak duża będzie, to znaczy, ile elementów będzie zawierać.

To dobrze, kiedy z góry zdecydowałem, że chcę 7 miast, ale jeśli chcę wszystkie miasta, a kod odczytuje plik CSV wiersz po wierszu, wtedy nie będziesz wiedział, ile jest miast, dopóki kod nie osiągnie końca pliku i nie odkryje, że nie ma już więcej miast, ale to jest już za późno, aby utworzyć tablicę, ponieważ musisz umieścić miasta w tablicy, gdy każde z nich zostanie zaimportowane. Dlatego w tej sytuacji musisz utworzyć instancję kolekcji, zanim dowiesz się, ile elementów będzie w niej przechowywane.

Jak możesz to zrobić za pomocą tablicy? Niestety, w przypadku tablic odpowiedź brzmi: nie możesz, i to jest podstawowa słabość tablic.
Tablice mają stały rozmiar.
Musisz określić rozmiar, kiedy tworzysz tablicę, ile elementów zawiera ta tablica, a potem nigdy nie możesz zmienić tego rozmiaru.

To świetnie, jeśli jest to zbiór powiedzmy miesięcy w roku lub dni tygodnia,
kiedy dokładnie wiesz, ile elementów będziesz potrzebować, ale w większości przypadków, gdy czytasz dane z zewnętrznego źródła danych, nie wiesz, ile elementów będzie, dopóki nie skończysz czytać danych, i tu pojawia się lista List.

Lista jest bardzo podobna do tablicy, z tym wyjątkiem, że nie ma ustalonego rozmiaru. Możesz dowolnie dodawać do niej dowolną liczbę elementów, kiedy tylko chcesz.

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

Zamierzam zmodyfikować teraz wersję demo naszych miast, aby faktycznie czytać wszystkie miasta za pomocą listy, ale najpierw pokażę podstawy kodowania listy, tworząc listę miesięcy, tak jak zrobiłem dla tablic na początku kursu. Chcę, aby lista stingów zawierała miesiące, dlatego deklaruję zmienną jako Listę stringów,

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

Podobnie, gdybym chciał listę znaków.

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.
Musisz 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.

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.

Cały kurs dostępny na Udemy

!!! Dodatkowo Prezent !!!

Książka „Wprowadzenie do kolekcji C#”