Différence d'ensembles
Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 24 sur 65.
Parfois, vous devez trouver des éléments qui existent dans un Set mais pas dans un autre. La méthode difference() résout cela en créant un nouvel ensemble contenant uniquement les éléments du premier ensemble qui ne sont pas présents dans le second.
Considérez cela comme une soustraction pour les ensembles - vous supprimez tous les éléments du second ensemble du premier ensemble. La méthode difference() renvoie un nouvel ensemble avec les éléments restants, laissant les deux ensembles originaux inchangés.
Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};
Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks); // {meeting, report}Cette opération est particulièrement utile pour trouver ce qui manque, ce qu'il reste à faire ou ce qui est unique à une collection par rapport à une autre. Contrairement à l'intersection qui trouve les points communs, la différence met en évidence ce qui rend un ensemble distinct d'un autre.
Défi
FacileCréez un programme qui gère un système de gestion de projet en identifiant les tâches planifiées mais pas encore terminées. Votre programme doit :
- Lire une chaîne de caractères en entrée représentant le nom du projet
- Lire plusieurs chaînes de caractères représentant les tâches planifiées (la saisie se terminera lorsque vous recevrez
"planned_done") - Lire plusieurs chaînes de caractères représentant les tâches terminées (la saisie se terminera lorsque vous recevrez
"completed_done") - Créer deux Sets distincts pour stocker les tâches planifiées et les tâches terminées
- Utiliser la méthode
difference()pour trouver les tâches qui sont planifiées mais pas encore terminées - Afficher l'analyse du statut du projet exactement dans le format indiqué ci-dessous
Par exemple, si le nom du projet est "Website Launch", que les tâches planifiées sont "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site", et que les tâches terminées sont "Design mockups", "Setup database", votre programme doit afficher :
Project: Website Launch
Planned tasks: {Design mockups, Write content, Setup database, Test functionality, Deploy site}
Completed tasks: {Design mockups, Setup database}
Remaining tasks: {Write content, Test functionality, Deploy site}
Tasks completed: 2
Tasks remaining: 3
Progress: 40.0% complete
Status: Project in progress - 3 task(s) remainingSi le nom du projet est "Mobile App Development", que les tâches planifiées sont "Create wireframes", "Develop UI", "Implement features", et que les tâches terminées sont "Create wireframes", "Develop UI", "Implement features", votre programme doit afficher :
Project: Mobile App Development
Planned tasks: {Create wireframes, Develop UI, Implement features}
Completed tasks: {Create wireframes, Develop UI, Implement features}
Remaining tasks: {}
Tasks completed: 3
Tasks remaining: 0
Progress: 100.0% complete
Status: Project completed successfullySi le nom du projet est "Marketing Campaign", que les tâches planifiées sont "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results", et que les tâches terminées sont "Research target audience", votre programme doit afficher :
Project: Marketing Campaign
Planned tasks: {Research target audience, Create content, Design graphics, Launch campaign, Analyze results}
Completed tasks: {Research target audience}
Remaining tasks: {Create content, Design graphics, Launch campaign, Analyze results}
Tasks completed: 1
Tasks remaining: 4
Progress: 20.0% complete
Status: Project in progress - 4 task(s) remainingVotre programme doit utiliser la méthode difference() pour trouver les tâches qui existent dans le Set des tâches planifiées mais pas dans le Set des tâches terminées. Calculez le pourcentage de progression en divisant les tâches terminées par le nombre total de tâches planifiées et en multipliant par 100, arrondi à 1 décimale. Si toutes les tâches sont terminées, affichez "Project completed successfully" comme statut, sinon affichez "Project in progress - X task(s) remaining" où X est le nombre de tâches restantes.
Aide-mémoire
La méthode difference() crée un nouvel ensemble contenant les éléments du premier ensemble qui ne sont pas présents dans le second ensemble :
Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};
Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks); // {meeting, report}Cette opération est comme une soustraction pour les ensembles - elle supprime tous les éléments du second ensemble du premier ensemble, en retournant un nouvel ensemble avec les éléments restants tout en laissant les deux ensembles originaux inchangés.
Essayez vous-même
import 'dart:io';
void main() {
// Lire le nom du projet
String? projectName = stdin.readLineSync();
// Lire les tâches planifiées jusqu'à "planned_done"
Set<String> plannedTasks = <String>{};
String? task;
while ((task = stdin.readLineSync()) != "planned_done") {
if (task != null) {
plannedTasks.add(task);
}
}
// Lire les tâches terminées jusqu'à "completed_done"
Set<String> completedTasks = <String>{};
while ((task = stdin.readLineSync()) != "completed_done") {
if (task != null) {
completedTasks.add(task);
}
}
// TODO: Écrivez votre code ci-dessous
// Utilisez la méthode difference() pour trouver les tâches restantes
// Calculer le pourcentage de progression
// Déterminer le statut du projet
// Afficher les résultats
print("Project: $projectName");
print("Planned tasks: $plannedTasks");
print("Completed tasks: $completedTasks");
// Ajouter les instructions de sortie restantes ici
}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