Sprawdzanie, czy element znajduje się w zbiorze
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 20 z 65.
Podczas pracy z Set często trzeba sprawdzić, czy określony element znajduje się w kolekcji. Metoda contains() umożliwia proste i wydajne sprawdzenie — zwraca true, jeśli element zostanie znaleziony, a false, jeśli go tam nie ma.
Jedną z kluczowych zalet używania contains() z Set jest wyjątkowa wydajność. W przeciwieństwie do przeszukiwania List, gdzie trzeba sprawdzać każdy element po kolei, operacje na Set są zoptymalizowane pod kątem szybkiego wyszukiwania, dzięki czemu contains() działa bardzo wydajnie nawet w przypadku dużych kolekcji.
Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};
// Sprawdź, czy określone składniki są dostępne
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');
print(hasFlour); // true
print(hasMilk); // falseTa metoda jest szczególnie przydatna, gdy trzeba sprawdzić poprawność danych, zweryfikować warunki wstępne lub filtrować informacje na podstawie przynależności do określonego zbioru. Wynik logiczny sprawia, że doskonale nadaje się do użycia w instrukcjach warunkowych i operacjach logicznych.
Wyzwanie
ŁatwyUtwórz program, który zarządza systemem sprawdzania przepisów, weryfikując, czy określone składniki są dostępne w spiżarni. Twój program powinien:
- Wczytać dane wejściowe typu string reprezentujące nazwę przepisu
- Wczytać wiele danych wejściowych typu string reprezentujących dostępne składniki w spiżarni (wczytywanie zakończy się po otrzymaniu
"pantry_done") - Wczytać wiele danych wejściowych typu string reprezentujących składniki wymagane w przepisie (wczytywanie zakończy się po otrzymaniu
"recipe_done") - Utworzyć Set zawierający dostępne składniki ze spiżarni
- Użyć metody
contains(), aby sprawdzić, czy każdy wymagany składnik jest dostępny w spiżarni - Wyświetlić wyniki sprawdzania przepisu w dokładnym formacie pokazanym poniżej
Na przykład, jeśli nazwa przepisu to "Chocolate Chip Cookies", składniki w spiżarni to "flour", "sugar", "eggs", "butter", "vanilla", a wymagane składniki to "flour", "sugar", "chocolate chips", "butter", Twój program powinien wyświetlić:
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)Jeśli nazwa przepisu to "Scrambled Eggs", składniki w spiżarni to "eggs", "butter", "salt", "pepper", a wymagane składniki to "eggs", "butter", "salt", Twój program powinien wyświetlić:
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 availableJeśli nazwa przepisu to "Fruit Salad", składniki w spiżarni to "apples", "bananas", a wymagane składniki to "apples", "oranges", "grapes", "honey", Twój program powinien wyświetlić:
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)Twój program musi używać metody contains(), aby sprawdzić każdy wymagany składnik w zbiorze Set zawierającym składniki ze spiżarni. Zapisz wymagane składniki na liście, aby zachować kolejność ich sprawdzania, a brakujące składniki zbierz na osobnej liście. Jeśli wszystkie składniki są dostępne, wyświetl jako status "Ready to cook - all ingredients available". Jeśli brakuje jakichkolwiek składników, wyświetl "Cannot make recipe - missing X ingredient(s)", gdzie X oznacza liczbę brakujących składników.
Spróbuj swoich sił
import 'dart:io';
void main() {
// Wczytaj nazwę przepisu
String? recipeName = stdin.readLineSync();
// Wczytuj składniki ze spiżarni aż do "pantry_done"
Set<String> pantryIngredients = <String>{};
String? pantryInput;
while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
if (pantryInput != null) {
pantryIngredients.add(pantryInput);
}
}
// Wczytuj wymagane składniki aż do "recipe_done"
List<String> requiredIngredients = <String>[];
String? recipeInput;
while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
if (recipeInput != null) {
requiredIngredients.add(recipeInput);
}
}
// TODO: Napisz swój kod poniżej
// Użyj pantryIngredients.contains(), aby sprawdzić każdy wymagany składnik
// Utwórz listę do przechowywania brakujących składników
// Sprawdź dostępność i wypisz wyniki w wymaganym formacie
// Wypisz wyniki (zastąp własną implementacją)
print("Recipe: $recipeName");
print("Pantry ingredients: $pantryIngredients");
print("Required ingredients: $requiredIngredients");
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online