Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Crie um programa que gerencie uma plataforma de mídia social encontrando conexões mútuas entre dois usuários. Seu programa deve:

  1. Ler uma entrada de string representando o nome do primeiro usuário
  2. Ler múltiplas entradas de string representando as conexões do primeiro usuário (a entrada terminará quando você receber "user1_done")
  3. Ler uma entrada de string representando o nome do segundo usuário
  4. Ler múltiplas entradas de string representando as conexões do segundo usuário (a entrada terminará quando você receber "user2_done")
  5. Criar dois Sets separados para armazenar as conexões de cada usuário
  6. Usar o método intersection() para encontrar conexões mútuas entre ambos os usuários
  7. 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 connections

Se 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 connections

Se 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 connections

Seu 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
}
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