Diferencia de Conjuntos
Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 24 de 65.
A veces necesitas encontrar elementos que existen en un Set pero no en otro. El método difference() resuelve esto creando un nuevo conjunto que contiene solo los elementos del primer conjunto que no están presentes en el segundo conjunto.
Piénsalo como una resta de conjuntos: estás eliminando todos los elementos del segundo conjunto del primer conjunto. El método difference() devuelve un nuevo conjunto con los elementos restantes, dejando ambos conjuntos originales sin cambios.
Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};
Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks); // {meeting, report}Esta operación es particularmente útil para encontrar qué falta, qué queda por hacer o qué es único en una colección en comparación con otra. A diferencia de la intersección, que encuentra elementos comunes, la diferencia resalta lo que hace que un conjunto sea distinto de otro.
Desafío
FácilCrea un programa que gestione un sistema de gestión de proyectos identificando las tareas que están planificadas pero aún no se han completado. Tu programa debe:
- Leer una entrada de cadena que represente el nombre del proyecto
- Leer múltiples entradas de cadena que representen las tareas planificadas (la entrada terminará cuando recibas
"planned_done") - Leer múltiples entradas de cadena que representen las tareas completadas (la entrada terminará cuando recibas
"completed_done") - Crear dos Sets separados para almacenar las tareas planificadas y las tareas completadas
- Usar el método
difference()para encontrar las tareas que están planificadas pero aún no se han completado - Imprimir el análisis del estado del proyecto en el formato exacto que se muestra a continuación
Por ejemplo, si el nombre del proyecto es "Website Launch", las tareas planificadas son "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site", y las tareas completadas son "Design mockups", "Setup database", tu programa debería mostrar:
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 el nombre del proyecto es "Mobile App Development", las tareas planificadas son "Create wireframes", "Develop UI", "Implement features", y las tareas completadas son "Create wireframes", "Develop UI", "Implement features", tu programa debería mostrar:
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 el nombre del proyecto es "Marketing Campaign", las tareas planificadas son "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results", y las tareas completadas son "Research target audience", tu programa debería mostrar:
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) remainingTu programa debe usar el método difference() para encontrar las tareas que existen en el Set de tareas planificadas pero no en el Set de tareas completadas. Calcula el porcentaje de progreso dividiendo las tareas completadas por el total de tareas planificadas y multiplicando por 100, redondeado a 1 decimal. Si todas las tareas están completadas, muestra "Project completed successfully" como estado; de lo contrario, muestra "Project in progress - X task(s) remaining" donde X es el número de tareas restantes.
Hoja de referencia
El método difference() crea un nuevo conjunto que contiene los elementos del primer conjunto que no están presentes en el segundo conjunto:
Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};
Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks); // {meeting, report}Esta operación es como una resta para conjuntos: elimina todos los elementos del segundo conjunto del primer conjunto, devolviendo un nuevo conjunto con los elementos restantes mientras deja ambos conjuntos originales sin cambios.
Pruébalo tú mismo
import 'dart:io';
void main() {
// Leer el nombre del proyecto
String? projectName = stdin.readLineSync();
// Leer las tareas planificadas hasta "planned_done"
Set<String> plannedTasks = <String>{};
String? task;
while ((task = stdin.readLineSync()) != "planned_done") {
if (task != null) {
plannedTasks.add(task);
}
}
// Leer las tareas completadas hasta "completed_done"
Set<String> completedTasks = <String>{};
while ((task = stdin.readLineSync()) != "completed_done") {
if (task != null) {
completedTasks.add(task);
}
}
// TODO: Escribe tu código a continuación
// Usa el método difference() para encontrar las tareas restantes
// Calcula el porcentaje de progreso
// Determina el estado del proyecto
// Mostrar los resultados
print("Project: $projectName");
print("Planned tasks: $plannedTasks");
print("Completed tasks: $completedTasks");
// Agrega aquí las declaraciones de salida restantes
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Manipulación avanzada de listas
Propiedades de listas: first y lastEstado de la lista: isEmpty y isNotEmptyInvertir una listaAñadir a una lista: insertEliminación en listas: removeWhereBúsqueda en una lista: indexOfOrdenar una listaMezclar una listaResumen - Organizador de listas4Manipulación avanzada de mapas
Iterar sobre un mapaComprobación de claves y valoresPropiedades del mapa: keys y valuesAdición condicional: putIfAbsentEliminar entradas de un mapaMapas anidadosResumen - Actualización de inventario2Operaciones funcionales con listas
Transformar con 'map'Filtrar con 'where'Uso de '.toList()'Comprobar condiciones con 'any'Condiciones con 'every'Búsqueda con 'firstWhere'Resumen - Filtrado de datos5Proyecto: Calculadora de carrito de compras
Configuración del proyectoAgregar artículos al carrito3Conjuntos
¿Qué es un Conjunto?Crear un ConjuntoAñadir y eliminar elementos de un ConjuntoComprobar elementos en un ConjuntoConvertir una lista en un ConjuntoUnión de ConjuntosIntersección de ConjuntosDiferencia de ConjuntosResumen - Lista de invitados única