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); // falseDiese 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.
Aufgabe
EinfachErstellen Sie ein Programm, das ein Rezeptvalidierungssystem verwaltet, indem es prüft, ob bestimmte Zutaten in der Vorratskammer verfügbar sind. Ihr Programm sollte:
- Einen String-Input einlesen, der den Rezeptnamen darstellt
- Mehrere String-Inputs einlesen, die die verfügbaren Zutaten in der Vorratskammer darstellen (die Eingabe endet, wenn Sie
"pantry_done"erhalten) - Mehrere String-Inputs einlesen, die die benötigten Rezeptzutaten darstellen (die Eingabe endet, wenn Sie
"recipe_done"erhalten) - Ein Set mit den verfügbaren Vorratszutaten erstellen
- Die Methode
contains()verwenden, um zu prüfen, ob jede benötigte Zutat in der Vorratskammer vorhanden ist - 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 availableWenn 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); // falseDie 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");
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste