Interseção de Conjuntos
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 23 de 65.
Quando você precisa encontrar elementos que existem em ambas as coleções Set, o método intersection() fornece a solução perfeita. Esta operação identifica os elementos comuns entre dois conjuntos, criando um novo conjunto que contém apenas os itens que aparecem em ambas as coleções originais.
O método intersection() funciona comparando os elementos de dois conjuntos e retornando um novo conjunto contendo apenas os valores compartilhados. Como outras operações de conjunto, ele lida automaticamente com a unicidade, de modo que cada elemento comum aparece apenas uma vez no resultado.
Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};
Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends); // {Charlie, Diana}Esta operação é particularmente útil para encontrar sobreposições em dados, como interesses comuns entre usuários, habilidades compartilhadas em equipes ou critérios de correspondência em operações de filtragem. A interseção ajuda você a identificar o que duas coleções têm em comum, tornando-a valiosa para tarefas de comparação e análise.
Desafio
FácilCrie um programa que gerencie uma plataforma de mídia social encontrando conexões mútuas entre dois usuários. Seu programa deve:
- Ler uma entrada de string representando o nome do primeiro usuário
- Ler múltiplas entradas de string representando as conexões do primeiro usuário (a entrada terminará quando você receber
"user1_done") - Ler uma entrada de string representando o nome do segundo usuário
- Ler múltiplas entradas de string representando as conexões do segundo usuário (a entrada terminará quando você receber
"user2_done") - Criar dois Sets separados para armazenar as conexões de cada usuário
- Usar o método
intersection()para encontrar conexões mútuas entre ambos os usuários - Imprimir os resultados da análise de conexão no formato exato mostrado abaixo
Por exemplo, se o primeiro usuário for "Alice" com as conexões "Bob", "Charlie", "Diana", "Eve", e o segundo usuário for "Bob" com as conexões "Alice", "Charlie", "Frank", "Diana", seu programa deve exibir:
User Analysis: Finding mutual connections
Alice's connections: {Bob, Charlie, Diana, Eve}
Bob's connections: {Alice, Charlie, Frank, Diana}
Mutual connections: {Charlie, Diana}
Total mutual connections: 2
Connection strength: Strong (2+ mutual connections)
Status: Users have mutual connectionsSe o primeiro usuário for "Sarah" com as conexões "John", "Mike", "Lisa", e o segundo usuário for "Tom" com as conexões "Emma", "David", "Kate", seu programa deve exibir:
User Analysis: Finding mutual connections
Sarah's connections: {John, Mike, Lisa}
Tom's connections: {Emma, David, Kate}
Mutual connections: {}
Total mutual connections: 0
Connection strength: None (no mutual connections)
Status: Users have no mutual connectionsSe o primeiro usuário for "Emma" com as conexões "Alex", "Jordan", "Taylor", "Morgan", e o segundo usuário for "Jordan" com as conexões "Emma", "Taylor", "Casey", seu programa deve exibir:
User Analysis: Finding mutual connections
Emma's connections: {Alex, Jordan, Taylor, Morgan}
Jordan's connections: {Emma, Taylor, Casey}
Mutual connections: {Taylor}
Total mutual connections: 1
Connection strength: Weak (1 mutual connection)
Status: Users have mutual connectionsSeu programa deve usar o método intersection() para encontrar conexões comuns entre os dois Sets de usuários. Determine a força da conexão com base no número de conexões mútuas: "None" para 0 conexões mútuas, "Weak" para exatamente 1 conexão mútua e "Strong" para 2 ou mais conexões mútuas. Se houver conexões mútuas, mostre "Users have mutual connections" como o status, caso contrário, mostre "Users have no mutual connections".
Folha de consulta
O método intersection() encontra elementos comuns entre dois conjuntos, retornando um novo conjunto contendo apenas os valores compartilhados:
Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};
Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends); // {Charlie, Diana}Esta operação lida automaticamente com a unicidade e é útil para encontrar sobreposições em dados, como interesses comuns, habilidades compartilhadas ou critérios de correspondência em operações de filtragem.
Experimente você mesmo
import 'dart:io';
void main() {
// Lê o nome do primeiro usuário
String? user1Name = stdin.readLineSync();
// Lê as conexões do primeiro usuário até "user1_done"
Set<String> user1Connections = <String>{};
String? connection;
while ((connection = stdin.readLineSync()) != "user1_done") {
if (connection != null) {
user1Connections.add(connection);
}
}
// Lê o nome do segundo usuário
String? user2Name = stdin.readLineSync();
// Lê as conexões do segundo usuário até "user2_done"
Set<String> user2Connections = <String>{};
while ((connection = stdin.readLineSync()) != "user2_done") {
if (connection != null) {
user2Connections.add(connection);
}
}
// TODO: Escreva seu código abaixo
// Encontre conexões mútuas usando o método intersection()
// Determine a força da conexão com base na contagem de conexões mútuas
// Gere o formato de saída exigido
// Imprime os resultados da análise
print("User Analysis: Finding mutual connections");
// Adicione suas instruções de saída aqui
}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 Únicos