Menu
Coddy logo textTech

União de Conjuntos

Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 22 de 65.

Quando você tem duas coleções Set separadas, você pode combiná-las em um único conjunto contendo todos os elementos únicos de ambos usando o método union(). Esta operação cria um novo conjunto que inclui cada elemento que aparece em qualquer um dos conjuntos originais.

O método union() lida automaticamente com duplicatas para você. Se o mesmo elemento existir em ambos os conjuntos, ele aparecerá apenas uma vez no conjunto união resultante, mantendo a propriedade fundamental de que conjuntos contêm apenas 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}

Observe como 'JavaScript' aparece em ambos os conjuntos originais, mas apenas uma vez no resultado da união. Isso torna o union() perfeito para combinar coleções relacionadas, garantindo que não haja duplicatas, como ao mesclar conjuntos de habilidades, combinar permissões de usuário ou consolidar dados de várias fontes.

Você também pode encontrar apenas os elementos que dois conjuntos compartilham usando o método intersection(). Ele retorna um novo conjunto contendo apenas os elementos que aparecem em ambos os conjuntos.


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

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

Para exibir os elementos de um conjunto como uma única string legível, use o método join(). Você pode passar uma string separadora para colocar entre cada elemento.


Set<String> sharedSkills = {'JavaScript'};
print(sharedSkills.join(', '));  // JavaScript

Set<String> allSkills = {'HTML', 'CSS', 'JavaScript', 'Python', 'SQL'};
print(allSkills.join(', '));  // HTML, CSS, JavaScript, Python, SQL
challenge icon

Desafio

Fácil

Crie um programa que gerencie um sistema de networking profissional combinando conjuntos de habilidades de diferentes membros da equipe para criar um perfil de habilidades abrangente para o projeto. Seu programa deve:

  1. Ler uma entrada de string representando o nome do projeto
  2. Ler múltiplas entradas de string representando as habilidades do primeiro membro da equipe (a entrada terminará quando você receber "member1_done")
  3. Ler múltiplas entradas de string representando as habilidades do segundo membro da equipe (a entrada terminará quando você receber "member2_done")
  4. Criar dois Sets separados para armazenar as habilidades de cada membro da equipe
  5. Usar o método union() para combinar ambos os conjuntos de habilidades em um perfil de habilidades abrangente para o projeto
  6. Imprimir os resultados da combinação de habilidades no formato exato mostrado abaixo

Por exemplo, se o nome do projeto for "Web Development Project", as habilidades do primeiro membro forem "HTML", "CSS", "JavaScript", "React", e as habilidades do segundo membro forem "JavaScript", "Node.js", "MongoDB", "React", seu programa deve exibir:

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

Se o nome do projeto for "Mobile App Development", as habilidades do primeiro membro forem "Dart", "Flutter", "Firebase", e as habilidades do segundo membro forem "Swift", "iOS", "Xcode", seu programa deve exibir:

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

Se o nome do projeto for "Data Science Project", as habilidades do primeiro membro forem "Python", "Pandas", "NumPy", "SQL", e as habilidades do segundo membro forem "Python", "SQL", "Tableau", "Statistics", seu programa deve exibir:

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

Seu programa deve usar o método union() para combinar os dois conjuntos de habilidades, demonstrando como ele lida automaticamente com duplicatas. Mostre os conjuntos de habilidades individuais primeiro e, em seguida, o resultado combinado. Identifique quaisquer habilidades sobrepostas encontrando habilidades que aparecem em ambos os conjuntos originais. Se não houver habilidades sobrepostas, exiba "None" para a linha de habilidades sobrepostas.

Folha de consulta

O método union() combina dois conjuntos em um único conjunto contendo todos os elementos únicos de ambos os conjuntos:

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}

O método union() lida automaticamente com duplicatas - se o mesmo elemento existir em ambos os conjuntos, ele aparecerá apenas uma vez no conjunto resultante.

O método intersection() retorna um novo conjunto contendo apenas os elementos que existem em ambos os conjuntos:

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

O método join() converte um conjunto em uma String concatenando todos os elementos, com um separador opcional:

print(allSkills.join(', '));  // HTML, CSS, JavaScript, Python, SQL

Experimente você mesmo

import 'dart:io';

void main() {
  // Ler o nome do projeto
  String? projectName = stdin.readLineSync();
  
  // Ler as habilidades do primeiro membro da equipe
  Set<String> member1Skills = <String>{};
  String? skill;
  while ((skill = stdin.readLineSync()) != "member1_done") {
    if (skill != null) {
      member1Skills.add(skill);
    }
  }
  
  // Ler as habilidades do segundo membro da equipe
  Set<String> member2Skills = <String>{};
  while ((skill = stdin.readLineSync()) != "member2_done") {
    if (skill != null) {
      member2Skills.add(skill);
    }
  }
  
  // TODO: Escreva seu código abaixo
  // Use o método union() para combinar ambos os conjuntos de habilidades
  // Encontre habilidades sobrepostas entre os dois conjuntos
  // Calcule o total de habilidades únicas
  
  // Exibir os resultados no formato exigido
  print("Project: $projectName");
  print("Team Member 1 skills: $member1Skills");
  print("Team Member 2 skills: $member2Skills");
  // Imprimir habilidades combinadas, contagem total, habilidades sobrepostas e status
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo