LINQ i kolekcje obiektów - Kwantyfikatory
Autor: Paweł Sołtysiak
Opublikowano: 2012-03-20
Kwantyfikatory służą do stwierdzenia, czy wszystkie elementy kolekcji spełniają określony warunek. Operator zapytań LINQ o nazwie Any sprawdza, czy kolekcja jest pusta lub sprawdza, czy w kolekcji znajduje się chociaż jeden element spełniający określony warunek. Operator All sprawdza, czy wszystkie elementy kolekcji spełniają warunek. Natomiast, operator Contains służy do sprawdzenia, czy w kolekcji znajduje się podany element.
Przed wykonaniem zadań powinieneś wiedzieć:
- jak utworzyć nowy projekt konsolowy w języku C# w Visual Studio (od wersji 2008),
- jak posługiwać się tablicami oraz kolekcjami,
- jak wykorzystać wyrażenia lambda.
Po wykonaniu zadań nauczysz się:
- jak sprawdzić, przy użyciu operatora Any, czy kolekcja nie jest pusta,
- jak sprawdzić, czy kolekcja zawiera co najmniej jeden element spełniający warunek,
- jak sprawdzić, czy wszystkie elementy kolekcji spełniają napisany warunek,
- jak sprawdzić, przy użyciu operatora Contains, czy kolekcja zawiera podany element.
Implementacja
W Visual Studio (od wersji 2008) utwórz nowy projekt konsolowy dla języka C#. Twoim zadaniem będzie sprawdzenie, jak działają operatory Any, All oraz Contains.
Operator Any – sprawdzenie, czy kolekcja jest pusta
Użycie operatora Any w celu sprawdzenia, czy kolekcja jest pusta.
- Otwórz plik o nazwie Program.cs
- Wewnątrz funkcji Main, wpisz:
var emptyArray = new int[] { };
var isArrayEmpty = !emptyArray.Any();
Console.WriteLine("Czy kolekcja jest pusta? " + (isArrayEmpty ? "Tak" : "Nie"));
- Uruchom program za pomocą Debug -> Start Without Debugging (Ctrl+F5),
- Powinien uruchomić się program wyświetlający informację - czy tabela emptyArray jest pusta. Tak, jak zostało to przedstawione na Rys. 1.
Rys. 1. Komunikat o tym, że tablica jest pusta.
Informacja |
Warto pamiętać, że Any() zwraca wartość - prawda lub fałsz. Operator zwraca prawdę, jeżeli w kolekcji znajdują się jakiekolwiek elementy. W przypadku, kiedy kolekcja jest pusta - zwraca fałsz. |
Operator Any – z podanym warunkiem
Istnieje możliwość wykorzystania przeciążonego operatora Any. Przyjmuje on jako argument wyrażenie lambda i sprawdza, czy w kolekcji znajduje się przynajmniej jeden element spełniający warunek.
- Zamień kod z poprzedniego zadania, następującym kodem:
var numbers = new[] { 3, 5, 7, 8, 1, 9 };
var isAnyNumberEven = numbers.Any(x => x % 2 == 0);
Console.WriteLine("Czy w kolekcji znajduje się liczba parzysta? " + (isAnyNumberEven ? "Tak" : "Nie"));
- Uruchom program za pomocą Debug -> Start Without Debugging (Ctrl+F5).
- Powinien uruchomić się program wyświetlający informację, czy w kolekcji znajduje się liczba parzysta. Tak, jak zostało to zaprezentowane na Rys. 2.
Rys. 2. Informacja o tym, że w kolekcji znajduje się liczba parzysta.
Operator All
Operator All służy do sprawdzenia, czy wszystkie elementy kolekcji spełniają określony warunek.
- Zamień kod z poprzedniego zadania, następującym kodem:
var numbers = new[] { 11, 2, 33, 4, 5, 66, 7, 8 };
var isAllNumberBiggerThanTen = numbers.All(x => x > 10);
Console.WriteLine("Czy wszystkie elementy w kolekcji są większe niż 10? " + (isAllNumberBiggerThanTen? "Tak": "Nie") );
- Uruchom program za pomocą Debug -> Start Without Debugging (Ctrl+F5).
- Powinien uruchomić się program wyświetlający informację, czy wszystkie elementy kolekcji są większe niż 10. Tak, jak prezentuje to Rys. 3.
Rys. 3. Komunikat o tym, że w kolekcji znajdują się tylko elementy większe niż 10.
Operator Contains
Operator Contains służy do sprawdzenia, czy w kolekcji znajduje się podany element.
- Zamień kod z poprzedniego zadania, następującym kodem:
var words = new[] { "mleko", "woda", "piwo", "kawa", "herbata" };
var isContaining = words.Contains("woda");
Console.WriteLine("Czy kolekcja zawiera słowo woda? " + (isContaining ? "Tak" : "Nie"));
- Uruchom program za pomocą Debug -> Start Without Debugging (Ctrl+F5).
- Powinien uruchomić się program wyświetlający informację, czy w kolekcji znajduje się słowo woda. Tak, jak zostało to przedstawione na Rys. 4.
Rys. 4. Komunikat stwierdzający, że słowo „woda” znajduje się w kolekcji.
Podsumowanie
W tym artykule nauczyłeś się obsługi kwantyfikatorów w LINQ. Dowiedziałeś się, jak wykorzystać operator Any w celu sprawdzenia, czy kolekcja jest pusta. Ponadto, poznałeś sposób na sprawdzenie, czy w kolekcji znajduje się element spełniający warunek. Następnie, dowiedziałeś jak, za pomocą operatora All, sprawdzić, czy wszystkie elementy kolekcji spełniają warunek. Na końcu, poznałeś operator Contains, sprawdzający, czy podany element występuje w kolekcji.