Suma zbiorów
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 22 z 65.
Gdy masz dwie oddzielne kolekcje typu Set, możesz połączyć je w jeden zbiór zawierający wszystkie unikalne elementy z obu, używając metody union(). Ta operacja tworzy nowy zbiór, który zawiera każdy element występujący w którymkolwiek z oryginalnych zbiorów.
Metoda union() automatycznie obsługuje duplikaty. Jeśli ten sam element występuje w obu zbiorach, pojawi się tylko raz w zbiorze wynikowym, zachowując podstawową właściwość zbiorów, która polega na tym, że zawierają wyłącznie unikalne wartości.
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}Zwróć uwagę, że „JavaScript” występuje w obu oryginalnych zbiorach, ale w wyniku sumy tylko raz. Dzięki temu union() świetnie nadaje się do łączenia powiązanych kolekcji z zachowaniem braku duplikatów, na przykład przy łączeniu zestawów umiejętności, uprawnień użytkowników lub danych z wielu źródeł.
Aby znaleźć elementy występujące w obu zbiorach, użyj metody intersection(). Zwraca ona nowy zbiór zawierający tylko wspólne elementy:
Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills); // {JavaScript}Gdy masz już zbiór nakładających się elementów, możesz przekształcić go w czytelny ciąg znaków za pomocą metody join(). Działa to tak samo jak w przypadku List. Łączy wszystkie elementy w jeden ciąg znaków z podanym separatorem:
Set<String> overlap = frontendSkills.intersection(backendSkills);
String result = overlap.isEmpty ? 'None' : overlap.join(', ');
print(result); // JavaScriptRazem funkcje union(), intersection() i join() dają ci potężne narzędzia do porównywania i wyświetlania danych zbiorów, na przykład do łączenia zestawów umiejętności zespołów i określania, które umiejętności już mają wspólne.
Wyzwanie
ŁatwyUtwórz program, który zarządza systemem profesjonalnych kontaktów, łącząc zestawy umiejętności różnych członków zespołu w celu utworzenia kompleksowego profilu umiejętności projektu. Twój program powinien:
- Odczytać dane wejściowe w postaci ciągu znaków reprezentującego nazwę projektu
- Odczytać wiele ciągów znaków reprezentujących umiejętności pierwszego członka zespołu (wprowadzanie danych zakończy się po otrzymaniu
"member1_done") - Odczytać wiele ciągów znaków reprezentujących umiejętności drugiego członka zespołu (wprowadzanie danych zakończy się po otrzymaniu
"member2_done") - Utworzyć dwa osobne zbiory przechowujące umiejętności każdego członka zespołu
- Użyć metody
union(), aby połączyć oba zestawy umiejętności w kompleksowy profil umiejętności projektu - Wyświetlić wyniki łączenia umiejętności dokładnie w formacie pokazanym poniżej
Na przykład, jeśli nazwa projektu to "Web Development Project", umiejętności pierwszego członka to "HTML", "CSS", "JavaScript", "React", a umiejętności drugiego członka to "JavaScript", "Node.js", "MongoDB", "React", program powinien wyświetlić:
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 successfullyJeśli nazwa projektu to "Mobile App Development", umiejętności pierwszego członka to "Dart", "Flutter", "Firebase", a umiejętności drugiego członka to "Swift", "iOS", "Xcode", program powinien wyświetlić:
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 successfullyJeśli nazwa projektu to "Data Science Project", umiejętności pierwszego członka to "Python", "Pandas", "NumPy", "SQL", a umiejętności drugiego członka to "Python", "SQL", "Tableau", "Statistics", program powinien wyświetlić:
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 successfullyTwój program musi użyć metody union(), aby połączyć oba zestawy umiejętności, pokazując, jak automatycznie obsługuje duplikaty. Najpierw wyświetl osobne zestawy umiejętności, a następnie połączony wynik. Wskaż umiejętności wspólne, znajdując te, które występują w obu oryginalnych zestawach. Jeśli nie ma wspólnych umiejętności, wyświetl "None" w wierszu dotyczącym wspólnych umiejętności.
Spróbuj swoich sił
import 'dart:io';
void main() {
// Wczytaj nazwę projektu
String? projectName = stdin.readLineSync();
// Wczytaj umiejętności pierwszego członka zespołu
Set<String> member1Skills = <String>{};
String? skill;
while ((skill = stdin.readLineSync()) != "member1_done") {
if (skill != null) {
member1Skills.add(skill);
}
}
// Wczytaj umiejętności drugiego członka zespołu
Set<String> member2Skills = <String>{};
while ((skill = stdin.readLineSync()) != "member2_done") {
if (skill != null) {
member2Skills.add(skill);
}
}
// TODO: Napisz swój kod poniżej
// Użyj metody union(), aby połączyć oba zbiory umiejętności
// Znajdź umiejętności wspólne dla obu zbiorów
// Oblicz łączną liczbę unikalnych umiejętności
// Wyświetl wyniki w wymaganym formacie
print("Project: $projectName");
print("Team Member 1 skills: $member1Skills");
print("Team Member 2 skills: $member2Skills");
// Wyświetl połączone umiejętności, ich łączną liczbę, wspólne umiejętności i status
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online