Menu
Coddy logo textTech

Prüfen auf Elemente in einem Set

Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 20 von 65.

Wenn Sie mit einem Set arbeiten, müssen Sie häufig prüfen, ob ein bestimmtes Element in der Sammlung vorhanden ist. Die Methode contains() bietet eine einfache und effiziente Möglichkeit, diese Prüfung durchzuführen, und gibt true zurück, wenn das Element gefunden wird, und false, wenn dies nicht der Fall ist.

Einer der Hauptvorteile der Verwendung von contains() mit einem Set ist seine außergewöhnliche Performance. Im Gegensatz zur Suche in einer List, bei der jedes Element einzeln geprüft werden muss, sind Set-Operationen für schnelle Suchvorgänge optimiert, was contains() auch bei großen Sammlungen sehr effizient macht.

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

// Prüfen, ob bestimmte Zutaten verfügbar sind
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');

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

Diese Methode ist besonders nützlich, wenn Sie Daten validieren, Voraussetzungen prüfen oder Informationen basierend auf der Zugehörigkeit zu einer bestimmten Sammlung filtern müssen. Das boolesche Ergebnis macht sie perfekt für die Verwendung in bedingten Anweisungen und logischen Operationen.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das ein Rezeptvalidierungssystem verwaltet, indem es prüft, ob bestimmte Zutaten in der Vorratskammer verfügbar sind. Ihr Programm sollte:

  1. Einen String-Input einlesen, der den Rezeptnamen darstellt
  2. Mehrere String-Inputs einlesen, die die verfügbaren Zutaten in der Vorratskammer darstellen (die Eingabe endet, wenn Sie "pantry_done" erhalten)
  3. Mehrere String-Inputs einlesen, die die benötigten Rezeptzutaten darstellen (die Eingabe endet, wenn Sie "recipe_done" erhalten)
  4. Ein Set mit den verfügbaren Vorratszutaten erstellen
  5. Die Methode contains() verwenden, um zu prüfen, ob jede benötigte Zutat in der Vorratskammer vorhanden ist
  6. Die Ergebnisse der Rezeptvalidierung im exakt unten gezeigten Format ausgeben

Wenn zum Beispiel der Rezeptname "Chocolate Chip Cookies" ist, die Vorratszutaten "flour", "sugar", "eggs", "butter", "vanilla" sind und die benötigten Zutaten "flour", "sugar", "chocolate chips", "butter" sind, sollte Ihr Programm Folgendes ausgeben:

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)

Wenn der Rezeptname "Scrambled Eggs" ist, die Vorratszutaten "eggs", "butter", "salt", "pepper" sind und die benötigten Zutaten "eggs", "butter", "salt" sind, sollte Ihr Programm Folgendes ausgeben:

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

Wenn der Rezeptname "Fruit Salad" ist, die Vorratszutaten "apples", "bananas" sind und die benötigten Zutaten "apples", "oranges", "grapes", "honey" sind, sollte Ihr Programm Folgendes ausgeben:

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)

Ihr Programm muss die Methode contains() verwenden, um jede benötigte Zutat gegen das Vorrats-Set zu prüfen. Speichern Sie die benötigten Zutaten in einer Liste, um die Reihenfolge für die Prüfung beizubehalten, und sammeln Sie alle fehlenden Zutaten in einer separaten Liste. Wenn alle Zutaten verfügbar sind, zeigen Sie "Ready to cook - all ingredients available" als Status an. Wenn Zutaten fehlen, zeigen Sie "Cannot make recipe - missing X ingredient(s)", wobei X die Anzahl der fehlenden Zutaten ist.

Spickzettel

Verwenden Sie die Methode contains(), um zu prüfen, ob ein bestimmtes Element in einem Set vorhanden ist. Sie gibt true zurück, wenn das Element gefunden wird, und false, wenn nicht:

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

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

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

Die Methode contains() ist bei Set-Collections hocheffizient und eignet sich daher ideal für schnelle Suchvorgänge, selbst bei großen Datensätzen. Sie ist besonders nützlich für Validierungen, das Überprüfen von Voraussetzungen und bedingte Operationen.

Probier es selbst

import 'dart:io';

void main() {
  // Rezeptnamen lesen
  String? recipeName = stdin.readLineSync();
  
  // Vorratszutaten lesen bis "pantry_done"
  Set<String> pantryIngredients = <String>{};
  String? pantryInput;
  while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
    if (pantryInput != null) {
      pantryIngredients.add(pantryInput);
    }
  }
  
  // Erforderliche Zutaten lesen bis "recipe_done"
  List<String> requiredIngredients = <String>[];
  String? recipeInput;
  while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
    if (recipeInput != null) {
      requiredIngredients.add(recipeInput);
    }
  }
  
  // TODO: Schreiben Sie Ihren Code unten
  // Verwenden Sie pantryIngredients.contains(), um jede erforderliche Zutat zu prüfen
  // Erstellen Sie eine Liste, um fehlende Zutaten zu speichern
  // Prüfen Sie die Verfügbarkeit und geben Sie die Ergebnisse im erforderlichen Format aus
  
  // Ergebnisse ausgeben (durch Ihre Implementierung ersetzen)
  print("Recipe: $recipeName");
  print("Pantry ingredients: $pantryIngredients");
  print("Required ingredients: $requiredIngredients");
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf