Menu
Coddy logo textTech

Unión de Conjuntos

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 22 de 65.

Cuando tienes dos colecciones Set separadas, puedes combinarlas en un único conjunto que contenga todos los elementos únicos de ambos utilizando el método union(). Esta operación crea un nuevo conjunto que incluye cada elemento que aparece en cualquiera de los conjuntos originales.

El método union() maneja automáticamente los duplicados por ti. Si el mismo elemento existe en ambos conjuntos, aparecerá solo una vez en el conjunto resultante de la unión, manteniendo la propiedad fundamental de que los conjuntos contienen solo valores únicos.

Set<String> frontendSkills = {'HTML', 'CSS', 'JavaScript'};
Set<String> backendSkills = {'JavaScript', 'Python', 'SQL'};

Set<String> allSkills = frontendSkills.union(backendSkills);
print(allSkills);  // {HTML, CSS, JavaScript, Python, SQL}

Observa cómo 'JavaScript' aparece en ambos conjuntos originales pero solo una vez en el resultado de la unión. Esto hace que union() sea perfecto para combinar colecciones relacionadas asegurando que no haya duplicados, como al fusionar conjuntos de habilidades, combinar permisos de usuario o consolidar datos de múltiples fuentes.

Para encontrar elementos que aparecen en ambos conjuntos, utiliza el método intersection(). Devuelve un nuevo conjunto que contiene solo los elementos compartidos:

Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills);  // {JavaScript}

Una vez que tengas un conjunto de elementos superpuestos, puedes convertirlo en una cadena legible utilizando el método join(). Esto funciona de la misma manera que en una List: une todos los elementos en una sola cadena con el separador que proporciones:

Set<String> overlap = frontendSkills.intersection(backendSkills);
String result = overlap.isEmpty ? 'None' : overlap.join(', ');
print(result);  // JavaScript

Juntos, union(), intersection(), y join() te brindan herramientas poderosas para comparar y mostrar datos de conjuntos; por ejemplo, para combinar los conjuntos de habilidades de un equipo e identificar qué habilidades ya comparten.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de redes profesionales combinando conjuntos de habilidades de diferentes miembros del equipo para crear un perfil de habilidades de proyecto integral. Tu programa debe:

  1. Leer una entrada de cadena que represente el nombre del proyecto
  2. Leer múltiples entradas de cadena que representen las habilidades del primer miembro del equipo (la entrada terminará cuando recibas "member1_done")
  3. Leer múltiples entradas de cadena que representen las habilidades del segundo miembro del equipo (la entrada terminará cuando recibas "member2_done")
  4. Crear dos Sets separados para almacenar las habilidades de cada miembro del equipo
  5. Usar el método union() para combinar ambos conjuntos de habilidades en un perfil de habilidades de proyecto integral
  6. Imprimir los resultados de la combinación de habilidades en el formato exacto que se muestra a continuación

Por ejemplo, si el nombre del proyecto es "Web Development Project", las habilidades del primer miembro son "HTML", "CSS", "JavaScript", "React", y las habilidades del segundo miembro son "JavaScript", "Node.js", "MongoDB", "React", tu programa debería mostrar:

Project: Web Development Project
Team Member 1 skills: {HTML, CSS, JavaScript, React}
Team Member 2 skills: {JavaScript, Node.js, MongoDB, React}
Combined project skills: {HTML, CSS, JavaScript, React, Node.js, MongoDB}
Total unique skills available: 6
Overlapping skills: JavaScript, React
Status: Project skill profile created successfully

Si el nombre del proyecto es "Mobile App Development", las habilidades del primer miembro son "Dart", "Flutter", "Firebase", y las habilidades del segundo miembro son "Swift", "iOS", "Xcode", tu programa debería mostrar:

Project: Mobile App Development
Team Member 1 skills: {Dart, Flutter, Firebase}
Team Member 2 skills: {Swift, iOS, Xcode}
Combined project skills: {Dart, Flutter, Firebase, Swift, iOS, Xcode}
Total unique skills available: 6
Overlapping skills: None
Status: Project skill profile created successfully

Si el nombre del proyecto es "Data Science Project", las habilidades del primer miembro son "Python", "Pandas", "NumPy", "SQL", y las habilidades del segundo miembro son "Python", "SQL", "Tableau", "Statistics", tu programa debería mostrar:

Project: Data Science Project
Team Member 1 skills: {Python, Pandas, NumPy, SQL}
Team Member 2 skills: {Python, SQL, Tableau, Statistics}
Combined project skills: {Python, Pandas, NumPy, SQL, Tableau, Statistics}
Total unique skills available: 6
Overlapping skills: Python, SQL
Status: Project skill profile created successfully

Tu programa debe usar el método union() para combinar los dos conjuntos de habilidades, demostrando cómo maneja automáticamente los duplicados. Muestra primero los conjuntos de habilidades individuales y luego el resultado combinado. Identifica cualquier habilidad superpuesta encontrando las habilidades que aparecen en ambos conjuntos originales. Si no hay habilidades superpuestas, muestra "None" en la línea de habilidades superpuestas.

Pruébalo tú mismo

import 'dart:io';

void main() {
  // Leer el nombre del proyecto
  String? projectName = stdin.readLineSync();
  
  // Leer las habilidades del primer miembro del equipo
  Set<String> member1Skills = <String>{};
  String? skill;
  while ((skill = stdin.readLineSync()) != "member1_done") {
    if (skill != null) {
      member1Skills.add(skill);
    }
  }
  
  // Leer las habilidades del segundo miembro del equipo
  Set<String> member2Skills = <String>{};
  while ((skill = stdin.readLineSync()) != "member2_done") {
    if (skill != null) {
      member2Skills.add(skill);
    }
  }
  
  // TODO: Escribe tu código debajo
  // Usa el método union() para combinar ambos conjuntos de habilidades
  // Encontrar habilidades superpuestas entre los dos conjuntos
  // Calcular el total de habilidades únicas
  
  // Mostrar los resultados en el formato requerido
  print("Project: $projectName");
  print("Team Member 1 skills: $member1Skills");
  print("Team Member 2 skills: $member2Skills");
  // Imprimir las habilidades combinadas, el recuento total, las habilidades superpuestas y el estado
}
quiz iconPonte a prueba

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