Unione di insiemi
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 22 di 65.
Quando hai due collezioni Set separate, puoi combinarle in un unico insieme contenente tutti gli elementi unici di entrambe usando il metodo union(). Questa operazione crea un nuovo insieme che include ogni elemento presente in uno dei due insiemi originali.
Il metodo union() gestisce automaticamente i duplicati per te. Se lo stesso elemento è presente in entrambi gli insiemi, apparirà una sola volta nell'insieme risultante dall'unione, mantenendo la proprietà fondamentale per cui gli insiemi contengono solo valori univoci.
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}Nota come 'JavaScript' compaia in entrambi gli insiemi originali ma una sola volta nel risultato dell'unione. Questo rende union() perfetto per combinare raccolte correlate assicurandosi che non ci siano duplicati, ad esempio unendo insiemi di competenze, combinando le autorizzazioni degli utenti o consolidando dati provenienti da più fonti.
Per trovare gli elementi che compaiono in entrambi gli insiemi, usa il metodo intersection(). Restituisce un nuovo insieme contenente solo gli elementi condivisi:
Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills); // {JavaScript}Una volta ottenuto un insieme di elementi sovrapposti, puoi convertirlo in una stringa leggibile usando il metodo join(). Funziona allo stesso modo che con una List. Unisce tutti gli elementi in un'unica stringa con un separatore che fornisci:
Set<String> overlap = frontendSkills.intersection(backendSkills);
String result = overlap.isEmpty ? 'None' : overlap.join(', ');
print(result); // JavaScriptInsieme, union(), intersection() e join() ti offrono potenti strumenti per confrontare e visualizzare i dati degli insiemi, ad esempio combinando le competenze delle squadre e individuando quali competenze hanno già in comune.
Sfida
FacileCrea un programma che gestisca un sistema di networking professionale combinando gli insiemi di competenze di diversi membri del team per creare un profilo completo delle competenze del progetto. Il tuo programma deve:
- Leggere una stringa in input che rappresenta il nome del progetto
- Leggere più stringhe in input che rappresentano le competenze del primo membro del team (l'input terminerà quando riceverai
"member1_done") - Leggere più stringhe in input che rappresentano le competenze del secondo membro del team (l'input terminerà quando riceverai
"member2_done") - Creare due insiemi separati per memorizzare le competenze di ciascun membro del team
- Usare il metodo
union()per combinare entrambi gli insiemi di competenze in un profilo completo delle competenze del progetto - Stampare i risultati della combinazione delle competenze nel formato esatto mostrato di seguito
Per esempio, se il nome del progetto è "Web Development Project", le competenze del primo membro sono "HTML", "CSS", "JavaScript", "React" e le competenze del secondo membro sono "JavaScript", "Node.js", "MongoDB", "React", il tuo programma dovrebbe produrre:
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 il nome del progetto è "Mobile App Development", le competenze del primo membro sono "Dart", "Flutter", "Firebase" e le competenze del secondo membro sono "Swift", "iOS", "Xcode", il tuo programma dovrebbe produrre:
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 il nome del progetto è "Data Science Project", le competenze del primo membro sono "Python", "Pandas", "NumPy", "SQL" e le competenze del secondo membro sono "Python", "SQL", "Tableau", "Statistics", il tuo programma dovrebbe produrre:
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 successfullyIl tuo programma deve usare il metodo union() per combinare i due insiemi di competenze, mostrando come gestisce automaticamente i duplicati. Mostra prima i singoli insiemi di competenze, poi il risultato combinato. Individua le eventuali competenze in comune trovando quelle presenti in entrambi gli insiemi originali. Se non ci sono competenze in comune, mostra "None" nella riga delle competenze in comune.
Provalo tu
import 'dart:io';
void main() {
// Leggi il nome del progetto
String? projectName = stdin.readLineSync();
// Leggi le competenze del primo membro del team
Set<String> member1Skills = <String>{};
String? skill;
while ((skill = stdin.readLineSync()) != "member1_done") {
if (skill != null) {
member1Skills.add(skill);
}
}
// Leggi le competenze del secondo membro del team
Set<String> member2Skills = <String>{};
while ((skill = stdin.readLineSync()) != "member2_done") {
if (skill != null) {
member2Skills.add(skill);
}
}
// TODO: Scrivi il tuo codice qui sotto
// Usa il metodo union() per unire i due insiemi di competenze
// Trova le competenze in comune tra i due insiemi
// Calcola il numero totale di competenze distinte
// Mostra i risultati nel formato richiesto
print("Project: $projectName");
print("Team Member 1 skills: $member1Skills");
print("Team Member 2 skills: $member2Skills");
// Stampa le competenze combinate, il numero totale, le competenze in comune e lo stato
}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