Menu
Coddy logo textTech

Intersezione di insiemi

Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 23 di 65.

Quando hai bisogno di trovare gli elementi presenti in entrambe le raccolte Set, il metodo intersection() offre la soluzione perfetta. Questa operazione individua gli elementi comuni a due insiemi, creando un nuovo insieme che contiene solo gli elementi presenti in entrambe le raccolte originali.

Il metodo intersection() funziona confrontando gli elementi di due insiemi e restituendo un nuovo insieme che contiene solo i valori condivisi. Come altre operazioni sugli insiemi, gestisce automaticamente l’unicità, quindi ogni elemento comune appare una sola volta nel risultato.

Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};

Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends);  // {Charlie, Diana}

Questa operazione è particolarmente utile per trovare sovrapposizioni nei dati, come interessi comuni tra utenti, competenze condivise nelle squadre o criteri corrispondenti nelle operazioni di filtraggio. L’intersezione ti aiuta a identificare ciò che due raccolte hanno in comune, rendendola preziosa per le attività di confronto e analisi.

challenge icon

Sfida

Facile

Crea un programma che gestisca una piattaforma di social media individuando le connessioni in comune tra due utenti. Il tuo programma deve:

  1. Leggere un input stringa che rappresenta il nome del primo utente
  2. Leggere più input stringa che rappresentano le connessioni del primo utente (l'input terminerà quando ricevi "user1_done")
  3. Leggere un input stringa che rappresenta il nome del secondo utente
  4. Leggere più input stringa che rappresentano le connessioni del secondo utente (l'input terminerà quando ricevi "user2_done")
  5. Creare due insiemi separati per memorizzare le connessioni di ciascun utente
  6. Usare il metodo intersection() per trovare le connessioni in comune tra i due utenti
  7. Stampare i risultati dell'analisi delle connessioni esattamente nel formato mostrato qui sotto

Per esempio, se il primo utente è "Alice" con le connessioni "Bob", "Charlie", "Diana", "Eve", e il secondo utente è "Bob" con le connessioni "Alice", "Charlie", "Frank", "Diana", il tuo programma dovrebbe produrre:

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 il primo utente è "Sarah" con le connessioni "John", "Mike", "Lisa", e il secondo utente è "Tom" con le connessioni "Emma", "David", "Kate", il tuo programma dovrebbe produrre:

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 il primo utente è "Emma" con le connessioni "Alex", "Jordan", "Taylor", "Morgan", e il secondo utente è "Jordan" con le connessioni "Emma", "Taylor", "Casey", il tuo programma dovrebbe produrre:

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

Il tuo programma deve usare il metodo intersection() per trovare le connessioni comuni tra i due insiemi degli utenti. Determina la forza della connessione in base al numero di connessioni in comune: "None" per 0 connessioni in comune, "Weak" per esattamente 1 connessione in comune e "Strong" per 2 o più connessioni in comune. Se ci sono connessioni in comune, mostra "Users have mutual connections" come stato; altrimenti mostra "Users have no mutual connections".

Provalo tu

import 'dart:io';

void main() {
  // Leggi il nome del primo utente
  String? user1Name = stdin.readLineSync();
  
  // Leggi il primo utente's connections fino a "user1_done"
  Set<String> user1Connections = <String>{};
  String? connection;
  while ((connection = stdin.readLineSync()) != "user1_done") {
    if (connection != null) {
      user1Connections.add(connection);
    }
  }
  
  // Leggi il nome del secondo utente
  String? user2Name = stdin.readLineSync();
  
  // Leggi il secondo utente's connections fino a "user2_done"
  Set<String> user2Connections = <String>{};
  while ((connection = stdin.readLineSync()) != "user2_done") {
    if (connection != null) {
      user2Connections.add(connection);
    }
  }
  
  // TODO: Scrivi il tuo codice qui sotto
  // Trova le connessioni in comune usando il metodo intersection()
  // Determina la forza della connessione in base al numero di connessioni in comune
  // Genera il formato di output richiesto
  
  // Stampa i risultati dell'analisi
  print("User Analysis: Finding mutual connections");
  // Aggiungi qui le istruzioni per l'output
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Dart online