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); // falseEste 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.
Desafio
FácilCrie 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:
- Ler uma entrada de string representando o nome da receita
- Ler múltiplas entradas de string representando os ingredientes disponíveis na despensa (a entrada terminará quando você receber
"pantry_done") - Ler múltiplas entradas de string representando os ingredientes necessários para a receita (a entrada terminará quando você receber
"recipe_done") - Criar um Set com os ingredientes disponíveis na despensa
- Usar o método
contains()para verificar se cada ingrediente necessário está disponível na despensa - 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 availableSe 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); // falseO 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");
}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
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos