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 solo conjunto que contenga todos los elementos únicos de ambas mediante 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() gestiona automáticamente los duplicados por ti. Si el mismo elemento existe en ambos conjuntos, aparecerá solo una vez en el conjunto unión resultante, manteniendo la propiedad fundamental de que los conjuntos contienen únicamente 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 both conjuntos originales, pero solo una vez en el resultado de la unión. Esto hace que union() sea perfecto para combinar colecciones relacionadas y garantizar que no haya duplicados, como al fusionar conjuntos de habilidades, combinar permisos de usuario o consolidar datos de múltiples fuentes.

Para encontrar los elementos que aparecen en ambos conjuntos, usa el método intersection(). Devuelve un conjunto nuevo que contiene únicamente 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 con una List. Une todos los elementos en una sola cadena con un separador que proporciones:

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

Juntas, union(), intersection() y join() te proporcionan herramientas potentes para comparar y mostrar datos de conjuntos, por ejemplo, combinar conjuntos de habilidades de equipos e identificar qué habilidades ya comparten.

challenge icon

Desafío

Fácil

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

  1. Leer una entrada de tipo cadena que represente el nombre del proyecto
  2. Leer varias entradas de tipo cadena que representen las habilidades del primer miembro del equipo (la entrada finalizará cuando recibas "member1_done")
  3. Leer varias entradas de tipo cadena que representen las habilidades del segundo miembro del equipo (la entrada finalizará cuando recibas "member2_done")
  4. Crear dos Sets independientes para almacenar las habilidades de cada miembro del equipo
  5. Usar el método union() para combinar ambos conjuntos de habilidades en un perfil integral de habilidades del proyecto
  6. Imprimir los resultados de la combinación de habilidades exactamente en el formato mostrado 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 debe 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 debe 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 debe 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 gestiona automáticamente los duplicados. Muestra primero los conjuntos de habilidades individuales y después el resultado combinado. Identifica las habilidades coincidentes encontrando las habilidades que aparecen en ambos conjuntos originales. Si no hay habilidades coincidentes, muestra "None" en la línea de habilidades coincidentes.

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
  // Find overlapping skills between the two sets
  // Calculate total unique skills
  
  // Muestra los resultados en el formato requerido
  print("Project: $projectName");
  print("Team Member 1 skills: $member1Skills");
  print("Team Member 2 skills: $member2Skills");
  // Print combined skills, total count, overlapping skills, and status
}
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

Practica por tu cuenta: Compilador de Dart online