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, pode combiná-las em um único conjunto contendo todos os elementos exclusivos de ambas usando o método union(). Essa 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 union() perfeito para combinar coleções relacionadas e, ao mesmo tempo, garantir que não haja duplicatas, como ao mesclar conjuntos de habilidades, combinar permissões de usuários ou consolidar dados de várias fontes.
Para encontrar elementos que aparecem em ambos os conjuntos, use o método intersection(). Ele retorna um novo conjunto contendo apenas os elementos compartilhados:
Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills); // {JavaScript}Depois de obter um conjunto de elementos sobrepostos, você pode convertê-lo em uma string legível usando o método join(). Isso funciona da mesma forma que em uma List. Ele une todos os elementos em uma única string com um separador que você fornece:
Set<String> overlap = frontendSkills.intersection(backendSkills);
String result = overlap.isEmpty ? 'None' : overlap.join(', ');
print(result); // JavaScriptJuntos, union(), intersection() e join() oferecem ferramentas poderosas para comparar e exibir dados de conjuntos, por exemplo, combinando conjuntos de habilidades de equipes e identificando quais habilidades elas já compartilham.
Desafio
FácilCrie um programa que gerencie um sistema de networking profissional combinando conjuntos de habilidades de diferentes membros da equipe para criar um perfil abrangente de habilidades do projeto. Seu programa deve:
- Ler uma entrada de texto representando o nome do projeto
- Ler várias entradas de texto representando as habilidades do primeiro membro da equipe (a entrada terminará quando você receber
"member1_done") - Ler várias entradas de texto representando as habilidades do segundo membro da equipe (a entrada terminará quando você receber
"member2_done") - Criar dois Sets separados para armazenar as habilidades de cada membro da equipe
- Usar o método
union()para combinar os dois conjuntos de habilidades em um perfil abrangente de habilidades do projeto - Imprimir os resultados da combinação de habilidades exatamente no formato 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 deverá produzir:
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 successfullySe 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 deverá produzir:
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 successfullySe 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 deverá produzir:
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 successfullySeu programa deve usar o método union() para combinar os dois conjuntos de habilidades, demonstrando como ele lida automaticamente com duplicatas. Mostre primeiro os conjuntos de habilidades individuais e, em seguida, o resultado combinado. Identifique todas as habilidades sobrepostas encontrando as habilidades que aparecem nos dois conjuntos originais. Se não houver habilidades sobrepostas, exiba "None" na linha de habilidades sobrepostas.
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
// Find overlapping skills between the two sets
// Calculate total unique skills
// Exiba os resultados no formato exigido
print("Project: $projectName");
print("Team Member 1 skills: $member1Skills");
print("Team Member 2 skills: $member2Skills");
// Print combined skills, total count, overlapping skills, and status
}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
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados ÚnicosPratique por conta própria: Compilador de Dart online