Vérifier la présence d'éléments dans un ensemble
Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 20 sur 65.
Lorsque vous travaillez avec un Set, vous aurez souvent besoin de vérifier si un élément spécifique existe dans la collection. La méthode contains() fournit un moyen simple et efficace d'effectuer cette vérification, renvoyant true si l'élément est trouvé et false s'il ne l'est pas.
L'un des principaux avantages de l'utilisation de contains() avec un Set est sa performance exceptionnelle. Contrairement à la recherche dans une List où chaque élément pourrait devoir être vérifié un par un, les opérations de Set sont optimisées pour des recherches rapides, rendant contains() très efficace même avec de grandes collections.
Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};
// Vérifier si des ingrédients spécifiques sont disponibles
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');
print(hasFlour); // true
print(hasMilk); // falseCette méthode est particulièrement utile lorsque vous devez valider des données, vérifier des prérequis ou filtrer des informations en fonction de l'appartenance à une collection spécifique. Le résultat booléen le rend parfait pour une utilisation dans des instructions conditionnelles et des opérations logiques.
Défi
FacileCréez un programme qui gère un système de validation de recettes en vérifiant si des ingrédients spécifiques sont disponibles dans le garde-manger de la cuisine. Votre programme doit :
- Lire une chaîne de caractères en entrée représentant le nom de la recette
- Lire plusieurs chaînes de caractères représentant les ingrédients disponibles dans le garde-manger (la saisie se terminera lorsque vous recevrez
"pantry_done") - Lire plusieurs chaînes de caractères représentant les ingrédients requis pour la recette (la saisie se terminera lorsque vous recevrez
"recipe_done") - Créer un Set avec les ingrédients disponibles dans le garde-manger
- Utiliser la méthode
contains()pour vérifier si chaque ingrédient requis est disponible dans le garde-manger - Afficher les résultats de la validation de la recette dans le format exact indiqué ci-dessous
Par exemple, si le nom de la recette est "Chocolate Chip Cookies", que les ingrédients du garde-manger sont "flour", "sugar", "eggs", "butter", "vanilla", et que les ingrédients requis sont "flour", "sugar", "chocolate chips", "butter", votre programme doit afficher :
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)Si le nom de la recette est "Scrambled Eggs", que les ingrédients du garde-manger sont "eggs", "butter", "salt", "pepper", et que les ingrédients requis sont "eggs", "butter", "salt", votre programme doit afficher :
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 availableSi le nom de la recette est "Fruit Salad", que les ingrédients du garde-manger sont "apples", "bananas", et que les ingrédients requis sont "apples", "oranges", "grapes", "honey", votre programme doit afficher :
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)Votre programme doit utiliser la méthode contains() pour vérifier chaque ingrédient requis par rapport au Set du garde-manger. Stockez les ingrédients requis dans une liste pour maintenir l'ordre de vérification, et collectez tous les ingrédients manquants dans une liste séparée. Si tous les ingrédients sont disponibles, affichez "Ready to cook - all ingredients available" comme statut. Si des ingrédients manquent, affichez "Cannot make recipe - missing X ingredient(s)" où X est le nombre d'ingrédients manquants.
Aide-mémoire
Utilisez la méthode contains() pour vérifier si un élément spécifique existe dans un Set. Elle renvoie true si l'élément est trouvé et false s'il ne l'est pas :
Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');
print(hasFlour); // true
print(hasMilk); // falseLa méthode contains() est très efficace avec les collections Set, ce qui la rend idéale pour des recherches rapides, même avec de grands ensembles de données. Elle est particulièrement utile pour la validation, la vérification des prérequis et les opérations conditionnelles.
Essayez vous-même
import 'dart:io';
void main() {
// Lire le nom de la recette
String? recipeName = stdin.readLineSync();
// Lire les ingrédients du garde-manger jusqu'à "pantry_done"
Set<String> pantryIngredients = <String>{};
String? pantryInput;
while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
if (pantryInput != null) {
pantryIngredients.add(pantryInput);
}
}
// Lire les ingrédients requis jusqu'à "recipe_done"
List<String> requiredIngredients = <String>[];
String? recipeInput;
while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
if (recipeInput != null) {
requiredIngredients.add(recipeInput);
}
}
// TODO: Écrivez votre code ci-dessous
// Utilisez pantryIngredients.contains() pour vérifier chaque ingrédient requis
// Créez une liste pour stocker les ingrédients manquants
// Vérifiez la disponibilité et affichez les résultats au format requis
// Afficher les résultats (remplacez par votre implémentation)
print("Recipe: $recipeName");
print("Pantry ingredients: $pantryIngredients");
print("Required ingredients: $requiredIngredients");
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Manipulation avancée des listes
Propriétés de liste : first & lastÉtat de la liste : isEmpty & isNotEmptyInverser une listeAjouter à une liste : insertSuppression dans une liste : removeWhereRechercher dans une liste : indexOfTrier une listeMélanger une listeRécapitulatif - Organisateur de liste4Manipulation avancée des Maps
Itérer sur une MapVérifier les clés et les valeursPropriétés de Map : keys & valuesAjout conditionnel : putIfAbsentSupprimer des entrées d'une MapMaps imbriquéesRécapitulatif - Mise à jour de l'inventaire2Opérations fonctionnelles sur les listes
Transformer avec 'map'Filtrer avec 'where'Utiliser '.toList()'Vérifier des conditions avec 'any'Conditions avec 'every'Trouver avec 'firstWhere'Récapitulatif - Filtrage de données3Les Ensembles
Qu'est-ce qu'un ensemble ?Créer un ensembleAjouter et supprimer des éléments d'un ensembleVérifier la présence d'éléments dans un ensembleConvertir une liste en ensembleUnion d'ensemblesIntersection d'ensemblesDifférence d'ensemblesRécapitulatif - Liste d'invités uniques