Verificare la presenza di elementi in un insieme
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 20 di 65.
Quando lavori con un Set, dovrai spesso verificare se un elemento specifico è presente nella raccolta. Il metodo contains() offre un modo semplice ed efficiente per effettuare questa verifica, restituendo true se l'elemento viene trovato e false in caso contrario.
Uno dei principali vantaggi dell’uso di contains() con un Set è la sua eccezionale velocità. A differenza della ricerca in una List, in cui potrebbe essere necessario controllare ogni elemento uno per uno, le operazioni sui Set sono ottimizzate per ricerche rapide, rendendo contains() molto efficiente anche con raccolte di grandi dimensioni.
Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};
// Controlla se sono disponibili ingredienti specifici
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');
print(hasFlour); // true
print(hasMilk); // falseQuesto metodo è particolarmente utile quando devi convalidare i dati, verificare i prerequisiti o filtrare le informazioni in base all'appartenenza a una raccolta specifica. Il risultato booleano lo rende perfetto per l'uso nelle istruzioni condizionali e nelle operazioni logiche.
Sfida
FacileCrea un programma che gestisca un sistema di convalida delle ricette verificando se determinati ingredienti sono disponibili nella dispensa della cucina. Il programma deve:
- Leggere un input di tipo stringa che rappresenta il nome della ricetta
- Leggere più input di tipo stringa che rappresentano gli ingredienti disponibili in dispensa (l’input termina quando ricevi
"pantry_done") - Leggere più input di tipo stringa che rappresentano gli ingredienti richiesti dalla ricetta (l’input termina quando ricevi
"recipe_done") - Creare un Set con gli ingredienti disponibili in dispensa
- Usare il metodo
contains()per verificare se ogni ingrediente richiesto è disponibile in dispensa - Stampare i risultati della convalida della ricetta nel formato esatto mostrato di seguito
Ad esempio, se il nome della ricetta è "Chocolate Chip Cookies", gli ingredienti in dispensa sono "flour", "sugar", "eggs", "butter", "vanilla" e gli ingredienti richiesti sono "flour", "sugar", "chocolate chips", "butter", il programma dovrebbe produrre:
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)Se il nome della ricetta è "Scrambled Eggs", gli ingredienti in dispensa sono "eggs", "butter", "salt", "pepper" e gli ingredienti richiesti sono "eggs", "butter", "salt", il programma dovrebbe produrre:
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 availableSe il nome della ricetta è "Fruit Salad", gli ingredienti in dispensa sono "apples", "bananas" e gli ingredienti richiesti sono "apples", "oranges", "grapes", "honey", il programma dovrebbe produrre:
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)Il programma deve usare il metodo contains() per verificare ogni ingrediente richiesto confrontandolo con il Set della dispensa. Memorizza gli ingredienti richiesti in una lista per mantenere l’ordine di verifica e raccogli gli eventuali ingredienti mancanti in una lista separata. Se tutti gli ingredienti sono disponibili, mostra "Ready to cook - all ingredients available" come stato. Se manca qualche ingrediente, mostra "Cannot make recipe - missing X ingredient(s)", dove X è il numero di ingredienti mancanti.
Provalo tu
import 'dart:io';
void main() {
// Leggi il nome della ricetta
String? recipeName = stdin.readLineSync();
// Leggi gli ingredienti della dispensa fino a "pantry_done"
Set<String> pantryIngredients = <String>{};
String? pantryInput;
while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
if (pantryInput != null) {
pantryIngredients.add(pantryInput);
}
}
// Leggi gli ingredienti necessari fino a "recipe_done"
List<String> requiredIngredients = <String>[];
String? recipeInput;
while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
if (recipeInput != null) {
requiredIngredients.add(recipeInput);
}
}
// TODO: Scrivi il tuo codice qui sotto
// Usa pantryIngredients.contains() per controllare ogni ingrediente necessario
// Crea una lista per memorizzare gli ingredienti mancanti
// Verifica la disponibilità e stampa i risultati nel formato richiesto
// Stampa i risultati (sostituisci con la tua implementazione)
print("Recipe: $recipeName");
print("Pantry ingredients: $pantryIngredients");
print("Required ingredients: $requiredIngredients");
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online