LINQ i lambda — wybieranie danych krótkim zapisem

Masz wyniki turnieju i chcesz wybrać tylko te powyżej progu, a potem je posortować. Najpierw rozumiesz pętle, teraz poznasz zapis opisujący operację na danych.

C#Technikum
CEL LEKCJI

Czego się dziś nauczysz

  • Odczytasz prostą lambdę x => warunek.
  • Użyjesz Where, OrderBy i ToArray.
  • Wyjaśnisz odroczone wykonanie zapytania.

Przygotowanie: lekcje 01–53. Przewidywany czas: 45–90 minut z zadaniami. Przykłady wymagają .NET 8 lub nowszego, z włączonymi ImplicitUsings i Nullable.

TEORIA

Wyjaśnienie krok po kroku

Lambda to mała funkcja

x => x >= 10 oznacza funkcję przyjmującą x i zwracającą wynik porównania. Nazwę x można zmienić na punkty. Where wywołuje tę funkcję dla elementów podczas przechodzenia wyników.

Łączenie operacji

Where wybiera elementy, OrderBy porządkuje je według wskazanego klucza, a Select przekształca każdy element, np. x => x * 2. To metody biblioteki LINQ dostępne po using System.Linq, a nie nowe instrukcje pętli w języku.

Kiedy wykonywana jest praca

Where i OrderBy zwykle tworzą opis zapytania. Praca następuje przy przechodzeniu wyników, np. foreach. ToArray wykonuje zapytanie i zapisuje wynik w nowej tablicy. Późniejsza zmiana źródłowej tablicy liczb nie zmieni już tej tablicy wynikowej.

PRZYKŁAD

Przykład do zbadania

Wklej cały przykład do nowego projektu konsolowego jako Program.cs. Zastąp poprzednią zawartość pliku. Nie łącz kilku całych programów w jednym pliku.

Program.cs — cały plik
using System;
using System.Linq;
int[] punkty = { 12, 4, 18, 10 };
int[] finalisci = punkty.Where(x => x >= 10).OrderBy(x => x).ToArray();
foreach (int wynik in finalisci) Console.WriteLine(wynik);
Console.WriteLine($"Liczba: {finalisci.Length}");
Oczekiwany wynik
10
12
18
Liczba: 3

Co dzieje się po kolei

  • Po Where pozostają 12, 18 i 10.
  • OrderBy ustala kolejność 10, 12, 18; x => x oznacza sortowanie według samej liczby.
  • ToArray zachowuje wynik. Tablica punkty pozostaje w pierwotnej kolejności.

Pobierz Program.cs

ELEMENTY WBUDOWANE

Użyte w tej lekcji elementy

Metody .NET są gotowymi narzędziami biblioteki. Instrukcje języka i nasze metody oznaczamy osobno. Właściwości, np. Length, odczytujemy bez nawiasów.

Element Wynik Działanie i ograniczenia
Where(warunek) IEnumerable<T> Zwraca sekwencję elementów spełniających predykat, czyli funkcję z wynikiem bool.
OrderBy(klucz) IOrderedEnumerable<T> Przy przechodzeniu daje porządek rosnący według klucza; sortowanie jest stabilne.
Select(przeksztalcenie) IEnumerable<TResult> Przekształca elementy funkcją, bez zmieniania źródłowej kolekcji przez samą metodę.
ToArray() T[] Wykonuje zapytanie i materializuje wynik w tablicy.
Any() bool Sprawdza, czy sekwencja zawiera co najmniej jeden element.
Average() dla int double Oblicza średnią; dla pustej sekwencji int zgłasza wyjątek.
Console.WriteLine(wartosc) void Wyświetla pojedynczy wynik.
CZĘSTE BŁĘDY

Częste błędy

  • Nie myl Where, które filtruje, z Select, które przekształca.
  • Zapytanie bez ToArray może odczytać zmienione później dane źródłowe.
  • Przed Average na int sprawdź, czy są dane, np. Any.

Skąd się bierze strzałka

Zapis x => x >= 10 to wyrażenie lambda z lekcji 53. Metody LINQ przyjmują je jako zwykłe argumenty typu Func — nie są nowymi instrukcjami języka.

ZADANIA

Zadania

ZAD 1Inny próg★☆☆

Zmień próg na 15, a potem 100.

Sprawdź: Wyniki: tylko 18, a następnie pusta tablica.

ZAD 2Podwójne punkty★★☆

Zastosuj Select, aby podwoić każdy wynik.

Sprawdź: 24, 8, 36, 20; źródło bez zmian.

ZAD 3Dwie wersje★★★

Odtwórz filtr punktów >= 10 pętlą i List<int>.

Sprawdź: Obie wersje mają ten sam zestaw wyników.

PODSUMOWANIE

Sprawdź, czy rozumiesz

Wyjaśnij własnymi słowami, jak działa główny przykład i dlaczego daje taki wynik. Następnie zmień jedną daną i przewidź wynik przed uruchomieniem. Wróć do celów lekcji i sprawdź, które potrafisz już wykonać samodzielnie.

Dokumentacja: Microsoft Learn — temat tej lekcji.