LINQ i kolekcje obiektów - Kwantyfikatory  Udostępnij na: Facebook

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.

  1. Otwórz plik o nazwie Program.cs
  2. Wewnątrz funkcji Main, wpisz:
var emptyArray = new int[] { };

var isArrayEmpty = !emptyArray.Any();
Console.WriteLine("Czy kolekcja jest pusta? " + (isArrayEmpty ? "Tak" : "Nie"));
  1. Uruchom program za pomocą Debug -> Start Without Debugging (Ctrl+F5),
  2. 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.

  1. 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"));
  1. Uruchom program za pomocą Debug -> Start Without Debugging (Ctrl+F5).
  2. 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.

  1. 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") );
  1. Uruchom program za pomocą Debug -> Start Without Debugging (Ctrl+F5).
  2. 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.

  1. 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"));
  1. Uruchom program za pomocą Debug -> Start Without Debugging (Ctrl+F5).
  2. 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.