Zrozumienie Listy w C#
Klasa List w C#, która jest wszechstronnym typem kolekcji. Jest oparta na dynamicznej tablicy jako wewnętrznej strukturze danych, co pozwala na efektywne manipulowanie elementami. Podczas tworzenia Listy można określić domyślną początkową pojemność, aby zoptymalizować użycie pamięci od samego początku. Ta pojemność to liczba elementów, które lista może początkowo przechowywać bez realokacji pamięci.
W filmie Layli Porter "C# for Beginners Part 7 - Querying Data with LINQ", zagłębia się ona w funkcjonalność list C# pokazując, jak efektywnie wykorzystywać LINQ (Język zapytań zintegrowany) do zapytań danych. Niniejszy artykuł wyjaśnia kluczowe pojęcia i przykłady z filmu Layli, oferując kompleksowe zrozumieniuiuiuiuie list C# dla początkujących.
Wprowadzenie do List C
Jak Layla wspomina na początku swojego filmu (0:03), lista w C# jest wszechstronną strukturą danych, która pozwala programistom przechowywać i manipulować kolekcją elementów. W przeciwieństwie do tablic, listy mogą dynamicznie zmieniać rozmiar, co sprawia, że są idealne do sytuacji, gdy liczba elementów nie jest znana z góry.
Użycie Listy jest proste. Można dodawać do niej elementy za pomocą metody Add, która dołącza określony obiekt na końcu listy. Lista używa indeksu zerowego, co oznacza, że pierwszy element jest dostępny pod indeksem 0. Można również uzyskać dostęp do elementów za pomocą określonego indeksu korzystając z notacji kwadratowych nawiasów ([]).
Aby przechodzić przez listę, można użyć pętli foreach, która przechodzi przez każdy element w kolejności, w jakiej się pojawiają. Jeśli trzeba znaleźć pierwsze wystąpienie określonego elementu, można użyć metod takich jak IndexOf z predykatem, która przeszukuje na podstawie określonego warunku.
Lista jest silnie typowana, co oznacza, że przechowuje obiekty określonego typu (T). Zapewnia to bezpieczeństwo typów i umożliwia korzystanie z metod i właściwości zdefiniowanych przez określony typ obiektu. Domyślnie Lista używa domyślnej funkcji skrótu, aby efektywnie organizować elementy.
Przyjrzyjmy się bliżej działaniu Listy i metodom klasy List, jak pokazano w filmie Layli.
Tworzenie Listy
Podczas tworzenia listy w C#, można ustawić określoną początkową pojemność, aby zoptymalizować wewnętrzną strukturę danych. Listy są wszechstronne i mogą być inicjalizowane z określonej kolekcji elementów. Można uzyskiwać dostęp do elementów przy użyciu indeksu int i iterować przez nie za pomocą pętli foreach. W przeciwieństwie do słowników, listy nie polegają na domyślnej funkcji skrótu, a przechowują silnie typowane obiekty, zapewniając bezpieczeństwo typów i spójność w zarządzaniu danymi.
W (0:44) Layla tworzy listę serów, ilustrując jak inicjalizować i wypełniać listę. W C# listę można utworzyć za pomocą klasy List, gdzie T reprezentuje typ elementów zawartych w liście.
List<Cheese> cheeseList = new List<Cheese>
{
new Cheese(1, "Stilton", 3.0m, 5),
new Cheese(2, "Cheddar", 2.25m, 3),
new Cheese(3, "Pineapple", 3.5m, 1),
new Cheese(4, "Brie", 5.5m, 2),
new Cheese(5, "Roquefort", 3.5m, 5),
};
List<Cheese> cheeseList = new List<Cheese>
{
new Cheese(1, "Stilton", 3.0m, 5),
new Cheese(2, "Cheddar", 2.25m, 3),
new Cheese(3, "Pineapple", 3.5m, 1),
new Cheese(4, "Brie", 5.5m, 2),
new Cheese(5, "Roquefort", 3.5m, 5),
};
W powyższym przykładzie Layla tworzy List<Cheese> używając składni inicjalizatora zbierającego do definiowania i wypełniania listy obiektami Cheese. Specyfikuje ona properties takie jak ID, nazwa, cena i siła dla każdego obiektu sera, co odpowiada klasie Cheese, demonstrując tworzenie i inicjalizację listy w C#.
Iteracja po Liście Serów w celu Drukowania ID i Nazwy
Layla Porter pokazuje, jak użyć pętli foreach do iteracji przez cheeseList i drukowania tylko ID i Nazwy każdego sera. Poniżej znajduje się kod wraz z wyjaśnieniem:
foreach (var cheese in cheeseList)
{
Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}
foreach (var cheese in cheeseList)
{
Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}
W powyższym kodzie Layla używa pętli foreach do przeszukiwania cheeseList. To drukuje wszystkie elementy listy. Pętla iteruje przez każdy obiekt Cheese w liście. W każdej iteracji zmienna cheese trzyma bieżący obiekt Cheese w określonym indeksie. Korzystając z Console.WriteLine, drukuje właściwości ID i Nazwę każdego elementu sera, pokazując, jak uzyskać dostęp i wyświetlić określone elementy z listy w C#.
Wyszukiwanie Serów Za Pomocą Zapytania LINQ
W wideo o 2:45, Layla Porter pokazuje, jak wyszukiwać określony ser na podstawie danych wejściowych użytkownika za pomocą LINQ. Używa metody ReadLine, by uzyskać nazwę sera od użytkownika:
string cheeseName = Console.ReadLine();
string cheeseName = Console.ReadLine();
Podczas wyszukiwania elementu na Liście, Layla zwraca uwagę na bardzo ważną kwestię o 2:51. Mówi, że gdybyśmy nie używali LINQ, musielibyśmy ręcznie iterować przez każdy ser w naszej kolekcji, aby znaleźć nazwę pasującą do danych wejściowych użytkownika, ale biblioteki pomocnicze LINQ radzą sobie z tym za kulisami, co czyni ten proces bardzo efektywnym. Poniżej znajduje się fragment kodu pokazujący, jak Layla (3:40) iteruje przez elementy listy bez użycia pętli for, używając jedynie składni zapytania LINQ:
if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);
Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
Console.WriteLine("I'm sorry, we don't have that cheese.");
}
if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);
Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
Console.WriteLine("I'm sorry, we don't have that cheese.");
}
W powyższym kodzie:
-
Layla wyjaśnia, że zamiast ręcznego przeglądania listy, możemy użyć LINQ do bardziej efektywnego wyszukiwania. Metoda
Anysprawdza, czy którykolwiek z serów na liście pasuje do nazwy wprowadzonej przez użytkownika. -
Jeśli znajdzie się dopasowanie, oznacza to, że element istnieje, metoda
FirstOrDefaultpobiera pierwszy ser, który odpowiada wprowadzonej nazwie. Ta metoda jest bezpieczna, ponieważ zwraca null, jeśli nie zostanie znalezione żadne dopasowanie, zapobiegając potencjalnym błędom. - Jeśli ser jest znaleziony, drukowana jest jego Nazwa, Cena i Siła. Jeśli nie, wyświetlany jest komunikat wskazujący, że ser nie został znaleziony.
To podejście pokazuje efektywność i prostotę użycia LINQ do wyszukiwania w kolekcjach w C#. Wynik fragmentu kodu pokazany jest o 7:19: (Lepszy obraz możliwy niż poniżej?)

Obsługa Wrażliwości Na Wielkość Liter Podczas Wyszukiwania
Podczas pracy z ciągami znaków, Layla o 8:00, przypomina, że ważne jest, aby pamiętać, że są one wrażliwe na wielkość liter. Aby upewnić się, że nasze porównania nazw serów są niewrażliwe na wielkość liter, musimy przekonwertować zarówno dane wejściowe użytkownika, jak i nazwy serów na naszej liście na małe litery, wykorzystując metodę .ToLower(). Pozwala to użytkownikowi na wprowadzenie dowolnego rodzaju kapitalizacji, a nasz kod nadal prawidłowo znajdzie pasujący ser. Wystarczy pamiętać, że wrażliwość na wielkość liter może być uciążliwa, więc jej odpowiednie przetwarzanie jest kluczowe.
Praktyczny Przykład: Zapytania Serów Przy Użyciu Siły
O 8:50 Layla tworzy praktyczny przykład, w którym użytkownik może filtrować sery według ich siły, pokazując, jak połączyć dane wejściowe użytkownika z zapytaniami LINQ.
1. Zachęta Do Wprowadzenia Danych I Ich Odczytanie
Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();
Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();
Layla o 9:05, zaczyna pytając użytkownika, aby wybrał wartość siły między 1 a 5. To jest zrobione za pomocą prostego Console.WriteLine proszącego o dane wejściowe, a następnie Console.ReadLine() do uchwycenia tego, co wpisują.
2. Konwersja Danych Wejściowych Na Liczbę Całkowitą
bool isInt = int.TryParse(strengthString, out int strength);
bool isInt = int.TryParse(strengthString, out int strength);
Następnie, o 9:16 upewnia się, że ich dane wejściowe to faktyczna liczba. Zaleca użycie int.TryParse do tego celu. Jeśli dane wejściowe się sprawdzą i zostaną pomyślnie skonwertowane na liczbę całkowitą, świetnie! Jeśli nie, cóż, możemy sobie z tym poradzić łagodnie.
3. Filtrowanie Serów Według Siły
List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();
List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();
Teraz nadchodzi zabawna część w filmie Layli o 10:25. Tutaj pokazuje, jak filtrować naszą listę serów i.e., cheeseList używając LINQ. Z metodą Where LINQ i szybką wyrażeniem lambda (c => c.Strength == strength), wyciąga tylko te sery, które pasują do siły wybranej przez użytkownika. To daje nam nową listę, cheeseByStrength.
4. Wyjście Filtrowanych Serów
foreach (var cheese in cheeseByStrength)
{
Console.WriteLine($"Name: {cheese.Name} cheese");
}
foreach (var cheese in cheeseByStrength)
{
Console.WriteLine($"Name: {cheese.Name} cheese");
}
W końcu o 12:03, aby ładnie zakończyć, Layla przechodzi przez cheeseByStrength z pętlą foreach. Dla każdego sera na tej liście, drukuje jego nazwę z użyciem określonego predykatu w Console.WriteLine. Proste i skuteczne!
Podczas wykonywania programu o 12:17, Layla pokazuje, jak użytkownik wprowadza wartość siły, a lista jest filtrowana, aby wyświetlić tylko sery o określonej sile. Poniżej pokazany jest przykładowy wynik: (Lepszy obraz możliwy?)

Wnioski
Film Layli skutecznie wprowadza koncepcję list C# i jak je zapytać za pomocą LINQ. Postępując według jej przykładów i wyjaśnień, początkujący mogą uzyskać solidne podstawy w pracy z listami i zapytaniami danych w C#. Po więcej szczegółów i sesji kodowania na żywo, odwiedź ten kanał Layli na YouTube i dołącz do jej transmisji na żywo.
Pamiętaj, aby zapoznać się z różnymi metodami i właściwościami klasy List, takimi jak właściwość Count, metoda Insert, funkcje predykatowe i wiele innych, aby poprawić swoje zrozumieniuiuiuiuie i umiejętność skutecznego manipulowania listami.


