Проверка наличия элементов в множестве
Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 20 из 65.
При работе с Set вам часто потребуется проверять, существует ли определенный элемент в коллекции. Метод contains() предоставляет простой и эффективный способ выполнения этой проверки, возвращая true, если элемент найден, и false, если нет.
Одним из ключевых преимуществ использования contains() с Set является его исключительная производительность. В отличие от поиска в List, где каждый элемент может потребоваться проверять по очереди, операции Set оптимизированы для быстрого поиска, что делает contains() очень эффективным даже при работе с большими коллекциями.
Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};
// Проверка наличия определенных ингредиентов
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');
print(hasFlour); // true
print(hasMilk); // falseЭтот метод особенно полезен, когда вам нужно валидировать данные, проверять предварительные условия или фильтровать информацию на основе принадлежности к определенной коллекции. Логический результат (boolean) делает его идеальным для использования в условных операторах и логических операциях.
Задание
ЛегкоСоздайте программу, которая управляет системой проверки рецептов, проверяя наличие определенных ингредиентов в кухонной кладовой. Ваша программа должна:
- Прочитать строковый ввод, представляющий название рецепта
- Прочитать несколько строковых вводов, представляющих доступные ингредиенты в кладовой (ввод закончится, когда вы получите
"pantry_done") - Прочитать несколько строковых вводов, представляющих необходимые ингредиенты для рецепта (ввод закончится, когда вы получите
"recipe_done") - Создать Set с доступными ингредиентами в кладовой
- Использовать метод
contains(), чтобы проверить, доступен ли каждый необходимый ингредиент в кладовой - Вывести результаты проверки рецепта в точном формате, показанном ниже
Например, если название рецепта — "Chocolate Chip Cookies", ингредиенты в кладовой — "flour", "sugar", "eggs", "butter", "vanilla", а необходимые ингредиенты — "flour", "sugar", "chocolate chips", "butter", ваша программа должна вывести:
Recipe: Chocolate Chip Cookies
Pantry ingredients: {flour, sugar, eggs, butter, vanilla}
Required ingredients: [flour, sugar, chocolate chips, butter]
Checking ingredient availability:
- flour: Available
- sugar: Available
- chocolate chips: Missing
- butter: Available
Missing ingredients: [chocolate chips]
Status: Cannot make recipe - missing 1 ingredient(s)Если название рецепта — "Scrambled Eggs", ингредиенты в кладовой — "eggs", "butter", "salt", "pepper", а необходимые ингредиенты — "eggs", "butter", "salt", ваша программа должна вывести:
Recipe: Scrambled Eggs
Pantry ingredients: {eggs, butter, salt, pepper}
Required ingredients: [eggs, butter, salt]
Checking ingredient availability:
- eggs: Available
- butter: Available
- salt: Available
Missing ingredients: []
Status: Ready to cook - all ingredients availableЕсли название рецепта — "Fruit Salad", ингредиенты в кладовой — "apples", "bananas", а необходимые ингредиенты — "apples", "oranges", "grapes", "honey", ваша программа должна вывести:
Recipe: Fruit Salad
Pantry ingredients: {apples, bananas}
Required ingredients: [apples, oranges, grapes, honey]
Checking ingredient availability:
- apples: Available
- oranges: Missing
- grapes: Missing
- honey: Missing
Missing ingredients: [oranges, grapes, honey]
Status: Cannot make recipe - missing 3 ingredient(s)Ваша программа должна использовать метод contains() для проверки каждого необходимого ингредиента по Set кладовой. Сохраняйте необходимые ингредиенты в списке, чтобы поддерживать порядок проверки, и собирайте все недостающие ингредиенты в отдельный список. Если все ингредиенты доступны, выведите "Ready to cook - all ingredients available" в качестве статуса. Если какие-либо ингредиенты отсутствуют, выведите "Cannot make recipe - missing X ingredient(s)", где X — количество недостающих ингредиентов.
Шпаргалка
Используйте метод contains(), чтобы проверить, существует ли определенный элемент в Set. Он возвращает true, если элемент найден, и false, если нет:
Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');
print(hasFlour); // true
print(hasMilk); // falseМетод contains() очень эффективен для коллекций Set, что делает его идеальным для быстрого поиска даже в больших наборах данных. Он особенно полезен для валидации, проверки предварительных условий и условных операций.
Попробуйте сами
import 'dart:io';
void main() {
// Чтение названия рецепта
String? recipeName = stdin.readLineSync();
// Чтение ингредиентов в кладовой до "pantry_done"
Set<String> pantryIngredients = <String>{};
String? pantryInput;
while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
if (pantryInput != null) {
pantryIngredients.add(pantryInput);
}
}
// Чтение необходимых ингредиентов до "recipe_done"
List<String> requiredIngredients = <String>[];
String? recipeInput;
while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
if (recipeInput != null) {
requiredIngredients.add(recipeInput);
}
}
// TODO: Напишите свой код ниже
// Используйте pantryIngredients.contains() для проверки каждого необходимого ингредиента
// Создайте список для хранения недостающих ингредиентов
// Проверьте наличие и выведите результаты в требуемом формате
// Вывод результатов (замените своей реализацией)
print("Recipe: $recipeName");
print("Pantry ingredients: $pantryIngredients");
print("Required ingredients: $requiredIngredients");
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутая работа со списками
Свойства списка: first и lastСостояние списка: isEmpty и isNotEmptyРазворот спискаДобавление в список: insertУдаление из списка: removeWhereПоиск в списке: indexOfСортировка спискаПеремешивание спискаИтоги — Органайзер списков4Продвинутая работа с Map
Итерация по MapПроверка ключей и значенийСвойства Map: keys и valuesУсловное добавление: putIfAbsentУдаление записей из MapВложенные MapИтоги — Обновление инвентаря2Функциональные операции со списками
Преобразование с помощью 'map'Фильтрация с помощью 'where'Использование '.toList()'Проверка условий с помощью 'any'Условия с 'every'Поиск с помощью 'firstWhere'Повторение — фильтрация данных5Проект: Калькулятор корзины
Настройка проектаДобавление товаров в корзину3Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей