Menu
Coddy logo textTech

Verificando Elementos em um Conjunto

Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 20 de 65.

Ao trabalhar com um Set, você precisará frequentemente verificar se um elemento específico existe na coleção. O método contains() fornece uma maneira simples e eficiente de realizar essa verificação, retornando true se o elemento for encontrado e false caso contrário.

Uma das principais vantagens de usar contains() com um Set é o seu desempenho excepcional. Ao contrário de pesquisar em um List, onde cada elemento pode precisar ser verificado um por um, as operações de Set são otimizadas para buscas rápidas, tornando o contains() muito eficiente, mesmo com grandes coleções.

Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};

// Verifique se ingredientes específicos estão disponíveis
bool hasFlour = ingredients.contains('flour');
bool hasMilk = innerIngredients.contains('milk');

print(hasFlour);  // true
print(hasMilk);   // false

Este método é particularmente útil quando você precisa validar dados, verificar pré-requisitos ou filtrar informações com base na associação em uma coleção específica. O resultado booleano o torna perfeito para uso em declarações condicionais e operações lógicas.

challenge icon

Desafio

Fácil

Crie um programa que gerencie um sistema de validação de receitas, verificando se ingredientes específicos estão disponíveis na despensa da cozinha. Seu programa deve:

  1. Ler uma entrada de string representando o nome da receita
  2. Ler múltiplas entradas de string representando os ingredientes disponíveis na despensa (a entrada terminará quando você receber "pantry_done")
  3. Ler múltiplas entradas de string representando os ingredientes necessários para a receita (a entrada terminará quando você receber "recipe_done")
  4. Criar um Set com os ingredientes disponíveis na despensa
  5. Usar o método contains() para verificar se cada ingrediente necessário está disponível na despensa
  6. Imprimir os resultados da validação da receita no formato exato mostrado abaixo

Por exemplo, se o nome da receita for "Chocolate Chip Cookies", os ingredientes da despensa forem "flour", "sugar", "eggs", "butter", "vanilla", e os ingredientes necessários forem "flour", "sugar", "chocolate chips", "butter", seu programa deve exibir:

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)

Se o nome da receita for "Scrambled Eggs", os ingredientes da despensa forem "eggs", "butter", "salt", "pepper", e os ingredientes necessários forem "eggs", "butter", "salt", seu programa deve exibir:

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

Se o nome da receita for "Fruit Salad", os ingredientes da despensa forem "apples", "bananas", e os ingredientes necessários forem "apples", "oranges", "grapes", "honey", seu programa deve exibir:

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)

Seu programa deve usar o método contains() para verificar cada ingrediente necessário em relação ao Set da despensa. Armazene os ingredientes necessários em uma lista para manter a ordem de verificação e colete quaisquer ingredientes ausentes em uma lista separada. Se todos os ingredientes estiverem disponíveis, mostre "Ready to cook - all ingredients available" como o status. Se houver ingredientes faltando, mostre "Cannot make recipe - missing X ingredient(s)", onde X é a contagem de ingredientes ausentes.

Folha de consulta

Use o método contains() para verificar se um elemento específico existe em um Set. Ele retorna true se o elemento for encontrado e false caso contrário:

Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};

bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');

print(hasFlour);  // true
print(hasMilk);   // false

O método contains() é altamente eficiente com coleções Set, tornando-o ideal para buscas rápidas, mesmo com grandes conjuntos de dados. É particularmente útil para validação, verificação de pré-requisitos e operações condicionais.

Experimente você mesmo

import 'dart:io';

void main() {
  // Ler o nome da receita
  String? recipeName = stdin.readLineSync();
  
  // Ler os ingredientes da despensa até "pantry_done"
  Set<String> pantryIngredients = <String>{};
  String? pantryInput;
  while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
    if (pantryInput != null) {
      pantryIngredients.add(pantryInput);
    }
  }
  
  // Ler os ingredientes necessários até "recipe_done"
  List<String> requiredIngredients = <String>[];
  String? recipeInput;
  while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
    if (recipeInput != null) {
      requiredIngredients.add(recipeInput);
    }
  }
  
  // TODO: Escreva seu código abaixo
  // Use pantryIngredients.contains() para verificar cada ingrediente necessário
  // Crie uma lista para armazenar os ingredientes que estão faltando
  // Verifique a disponibilidade e imprima os resultados no formato exigido
  
  // Imprimir os resultados (substitua pela sua implementação)
  print("Recipe: $recipeName");
  print("Pantry ingredients: $pantryIngredients");
  print("Required ingredients: $requiredIngredients");
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo