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 ingredientes específicos están disponibles en la despensa de la cocina. Tu programa debe:

  1. Leer una entrada de cadena que represente el nombre de la receta
  2. Leer múltiples entradas de cadena que representen los ingredientes disponibles en la despensa (la entrada terminará cuando recibas "pantry_done")
  3. Leer múltiples entradas de cadena que representen los ingredientes requeridos 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 requerido 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 requeridos 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 requeridos 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 requeridos 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 requerido contra el Set de la despensa. Almacena los ingredientes requeridos en una lista para mantener el orden de comprobación, y recolecta cualquier ingrediente faltante en una lista separada. Si todos los ingredientes están disponibles, muestra "Ready to cook - all ingredients available" como estado. Si falta algún ingrediente, muestra "Cannot make recipe - missing X ingredient(s)" donde X es el recuento de ingredientes faltantes.

Hoja de referencia

Usa el método contains() para comprobar si un elemento específico existe en un Set. Devuelve true si se encuentra el elemento y false si no:

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

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

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

El método contains() es altamente eficiente con colecciones Set, lo que lo hace ideal para búsquedas rápidas incluso con grandes conjuntos de datos. Es particularmente útil para validación, comprobación de prerrequisitos y operaciones condicionales.

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