Wzorce list i krotek
Zdestrukturyzuje Pan/Pani kolekcje.
Wzorce list i krotek to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.
Wzorce krotek
Wzorzec krotki dopasowuje kilka wartości jednocześnie, umieszczając je w nawiasach. Każda pozycja jest dopasowywana za pomocą własnego podwzorca.
Takie rozwiązanie doskonale sprawdza się w decyzjach zależnych od wielu danych wejściowych, na przykład w małej maszynie stanów lub sędziowaniu gry w papier, kamień, nożyce — wszystko w ramach jednego przełącznika.
int x = 0, y = 5;
string quadrant = (x, y) switch
{
(0, 0) => "origin",
(0, _) => "y-axis",
(_, 0) => "x-axis",
_ => "plane"
};
System.Console.WriteLine(quadrant);Działający przełącznik krotek
Wzorce krotek zwiększają czytelność tabel decyzyjnych. W tym przykładzie dwie wartości logiczne wybierają działanie.
Każde ramię zawiera wzorzec krotki, a symbol odrzucenia _ na danej pozycji oznacza, że może się tam znajdować dowolna wartość. Ostatnie ramię _ obejmuje wszystkie pozostałe przypadki.
using System;
class Program {
static string Move(bool fwd, bool turn) => (fwd, turn) switch {
(true, false) => "straight",
(true, true) => "curve",
(false, true) => "spin",
_ => "stop"
};
static void Main() => Console.WriteLine(Move(true, true));
}Wiązanie wartości wewnątrz krotek
Pozycje we wzorcu krotki mogą przechwytywać wartości. (0, var y) pasuje wtedy, gdy pierwszy element ma wartość 0, a drugi zostaje przypisany do y.
Następnie można użyć powiązanej zmiennej w wyniku ramienia lub w strażniku when, łącząc dopasowywanie i pobieranie wartości w jednym kroku.
var point = (0, 7);
string r = point switch
{
(0, var y) => $"on y-axis at {y}",
(var x, 0) => $"on x-axis at {x}",
_ => "elsewhere"
};
System.Console.WriteLine(r);Wzorce list
Wzorzec listy dopasowuje tablice i listy na podstawie ich elementów, używając nawiasów kwadratowych: [1, 2, 3]. Dopasowanie zachodzi, gdy długość oraz wzorzec każdego elementu są zgodne.
Wprowadzone w C# 11 wzorce list pozwalają bezpośrednio rozgałęziać wykonanie na podstawie kształtu sekwencji, bez ręcznego sprawdzania długości i indeksów.
int[] data = { 1, 2, 3 };
string shape = data switch
{
[] => "empty",
[_] => "one",
[_, _] => "two",
_ => "many"
};
System.Console.WriteLine(shape);Dopasowywanie dokładnych elementów
Wzorce list mogą dopasowywać określone wartości na poszczególnych pozycjach. [1, 2, 3] pasuje wyłącznie do dokładnie tej trzyelementowej sekwencji.
Można swobodnie łączyć stałe i symbole odrzucenia: [1, _, 3] pasuje do listy o długości trzech elementów, która zaczyna się od 1 i kończy na 3, ignorując element środkowy.
using System;
class Program {
static void Main() {
int[] a = { 1, 9, 3 };
bool ok = a is [1, _, 3];
Console.WriteLine(ok);
}
}Wzorzec wycinka
Wzorzec wycinka .. dopasowuje dowolną liczbę elementów, również zero, na jednej pozycji. Wzorzec listy może zawierać najwyżej jeden wycinek.
[1, .., 9] pasuje do dowolnej listy, która zaczyna się od 1 i kończy na 9, niezależnie od elementów pomiędzy nimi. Jest to bardzo przydatne przy sprawdzaniu początku i końca sekwencji.
int[] nums = { 1, 4, 5, 9 };
string r = nums switch
{
[1, .., 9] => "1..9 bookends",
_ => "other"
};
System.Console.WriteLine(r);Przechwytywanie wycinka
Wycinek może przechwycić pomijane elementy do zmiennej za pomocą var: [first, .. var rest].
Przechwycona część jest sama tablicą lub listą dopasowanego typu, dzięki czemu można rozłożyć pierwszy element i zachować pozostałą część do dalszego przetwarzania.
using System;
class Program {
static void Main() {
int[] xs = { 10, 20, 30, 40 };
if (xs is [var head, .. var tail])
Console.WriteLine($"{head} then {tail.Length} more");
}
}Wiązanie elementów brzegowych
Można powiązać oba końce wokół wycinka: [var first, .., var last] przechwytuje pierwszy i ostatni element, ignorując środek.
Jest to zwięzłe rozwiązanie dla sekwencji, w których znaczenie mają tylko granice, na przykład podczas sprawdzania, czy trasa zaczyna się i kończy w znanych punktach.
using System;
class Program {
static void Main() {
string[] route = { "A", "B", "C", "D" };
if (route is [var start, .., var end])
Console.WriteLine($"{start} -> {end}");
}
}Wzorce list z podwzorcami
Każda pozycja listy może używać dowolnego wzorca, w tym relacyjnego i logicznego. [> 0, > 0] pasuje do dwuelementowej listy liczb dodatnich.
Dzięki temu cały zestaw narzędzi wzorców można wykorzystać do dopasowywania sekwencji, sprawdzając ich kształt i zawartość w jednym wyrażeniu.
int[] pair = { 3, 8 };
string r = pair switch
{
[> 0, > 0] => "both positive",
[_, _] => "mixed",
_ => "wrong size"
};
System.Console.WriteLine(r);Zagnieżdżanie krotek i list
Wzorce krotek i list można zagnieżdżać w sobie nawzajem oraz we wzorcach właściwości. Pozycja krotki może zawierać wzorzec listy, a wzorzec listy może zawierać krotkę.
Pozwala to dopasowywać złożone dane strukturalne, takie jak oznaczona sekwencja, w jednym wyrażeniu zamiast za pomocą kilku zagnieżdżonych sprawdzeń.
using System;
class Program {
static void Main() {
(string, int[]) record = ("primes", new[]{ 2, 3 });
string r = record switch {
("primes", [2, ..]) => "starts with 2",
_ => "other"
};
Console.WriteLine(r);
}
}Wymagania dotyczące wzorców list
Wzorce list działają na każdym typie, który jest zliczalny i indeksowalny: musi on mieć właściwość Length lub Count oraz indeksator. Tablice, List<T> i ciągi znaków spełniają te wymagania.
Przechwytywanie wycinka wymaga dodatkowo metody wycinka lub indeksatora zakresu. Większość wbudowanych kolekcji obsługuje oba mechanizmy od razu.
string s = "cat";
bool isCat = s is ['c', 'a', 't'];
System.Console.WriteLine(isCat);Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat wzorców list i krotek.
Podsumowanie
Wzorce krotek dopasowują wiele wartości ujętych w nawiasy, a wzorce list dopasowują kształt sekwencji zapisany w nawiasach kwadratowych; .. oznacza wycinek, który może przechwycić środkową część za pomocą var.
Pozycje mogą przyjmować dowolny podwzorzec i można je swobodnie zagnieżdżać. Wzorce list wymagają typu zliczalnego i indeksowalnego. Znają już Państwo cały zestaw narzędzi wzorców języka C#.
Często zadawane pytania
Czy lekcja „Wzorce list i krotek” jest bezpłatna?
Tak — pełny tekst „Wzorce list i krotek” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wzorce list i krotek”?
Zdestrukturyzuje Pan/Pani kolekcje. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wzorce list i krotek”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wyrażenia switch
- Wzorce typów i właściwości
- Wzorce relacyjne i logiczne
- Wzorce list i krotek