Menu
Coddy logo textTech

Comprobar elementos en un Conjunto

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy. Lección 20 de 65.

Al trabajar con un Set, frecuentemente necesitarás comprobar si un elemento específico existe en la colección. El método contains() proporciona una forma sencilla y eficiente de realizar esta comprobación, devolviendo true si se encuentra el elemento y false si no es así.

Una de las ventajas clave de usar contains() con un Set es su rendimiento excepcional. A diferencia de buscar a través de un List donde cada elemento podría necesitar ser verificado uno por uno, las operaciones de Set están optimizadas para búsquedas rápidas, lo que hace que contains() sea muy eficiente incluso con colecciones grandes.

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

// Comprobar si hay ingredientes específicos disponibles
bool hasFlour = ingredients.contains('flour');
bool hasMilk = innerIngredients.contains('milk');

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

Este método es particularmente útil cuando necesitas validar datos, verificar prerrequisitos o filtrar información basada en la pertenencia a una colección específica. El resultado booleano lo hace perfecto para su uso en sentencias condicionales y operaciones lógicas.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de validación de recetas comprobando si hay ingredientes específicos disponibles en la despensa de la cocina. Tu programa debe:

  1. Leer una entrada de tipo cadena que represente el nombre de la receta
  2. Leer varias entradas de tipo cadena que representen los ingredientes disponibles en la despensa (la entrada terminará cuando recibas "pantry_done")
  3. Leer varias entradas de tipo cadena que representen los ingredientes necesarios para la receta (la entrada terminará cuando recibas "recipe_done")
  4. Crear un Set con los ingredientes disponibles en la despensa
  5. Usar el método contains() para comprobar si cada ingrediente necesario está disponible en la despensa
  6. Imprimir los resultados de la validación de la receta en el formato exacto que se muestra a continuación

Por ejemplo, si el nombre de la receta es "Chocolate Chip Cookies", los ingredientes de la despensa son "flour", "sugar", "eggs", "butter", "vanilla", y los ingredientes necesarios son "flour", "sugar", "chocolate chips", "butter", tu programa debería mostrar:

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)

Si el nombre de la receta es "Scrambled Eggs", los ingredientes de la despensa son "eggs", "butter", "salt", "pepper", y los ingredientes necesarios son "eggs", "butter", "salt", tu programa debería mostrar:

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

Si el nombre de la receta es "Fruit Salad", los ingredientes de la despensa son "apples", "bananas", y los ingredientes necesarios son "apples", "oranges", "grapes", "honey", tu programa debería mostrar:

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)

Tu programa debe usar el método contains() para comprobar cada ingrediente necesario con respecto al Set de la despensa. Almacena los ingredientes necesarios en una lista para mantener el orden de comprobación y recopila los ingredientes que falten en una lista independiente. Si todos los ingredientes están disponibles, muestra "Listo para cocinar: todos los ingredientes están disponibles" como estado. Si falta algún ingrediente, muestra "No se puede preparar la receta: faltan X ingrediente(s)", donde X es la cantidad de ingredientes que faltan.

Pruébalo tú mismo

import 'dart:io';

void main() {
  // Leer el nombre de la receta
  String? recipeName = stdin.readLineSync();
  
  // Leer los ingredientes de la despensa hasta "pantry_done"
  Set<String> pantryIngredients = <String>{};
  String? pantryInput;
  while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
    if (pantryInput != null) {
      pantryIngredients.add(pantryInput);
    }
  }
  
  // Leer los ingredientes requeridos hasta "recipe_done"
  List<String> requiredIngredients = <String>[];
  String? recipeInput;
  while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
    if (recipeInput != null) {
      requiredIngredients.add(recipeInput);
    }
  }
  
  // TODO: Escribe tu código a continuación
  // Usa pantryIngredients.contains() para verificar cada ingrediente requerido
  // Crea una lista para almacenar los ingredientes faltantes
  // Verifica la disponibilidad e imprime los resultados en el formato requerido
  
  // Imprimir los resultados (reemplazar con tu implementación)
  print("Recipe: $recipeName");
  print("Pantry ingredients: $pantryIngredients");
  print("Required ingredients: $requiredIngredients");
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Dart online