Menu
Coddy logo textTech

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);   // false

Ta 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.

challenge icon

Wyzwanie

Łatwy

Utwó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:

  1. Wczytać dane wejściowe typu string reprezentujące nazwę przepisu
  2. Wczytać wiele danych wejściowych typu string reprezentujących dostępne składniki w spiżarni (wczytywanie zakończy się po otrzymaniu "pantry_done")
  3. Wczytać wiele danych wejściowych typu string reprezentujących składniki wymagane w przepisie (wczytywanie zakończy się po otrzymaniu "recipe_done")
  4. Utworzyć Set zawierający dostępne składniki ze spiżarni
  5. Użyć metody contains(), aby sprawdzić, czy każdy wymagany składnik jest dostępny w spiżarni
  6. 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 available

Jeś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");
}
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator Dart online