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.
Sfida
FacileCrea un programma che gestisca una piattaforma di social media individuando le connessioni in comune tra due utenti. Il tuo programma deve:
- Leggere un input stringa che rappresenta il nome del primo utente
- Leggere più input stringa che rappresentano le connessioni del primo utente (l'input terminerà quando ricevi
"user1_done") - Leggere un input stringa che rappresenta il nome del secondo utente
- Leggere più input stringa che rappresentano le connessioni del secondo utente (l'input terminerà quando ricevi
"user2_done") - Creare due insiemi separati per memorizzare le connessioni di ciascun utente
- Usare il metodo
intersection()per trovare le connessioni in comune tra i due utenti - 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 connectionsSe 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 connectionsSe 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 connectionsIl 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
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online