Menu
Coddy logo textTech

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);  // JavaScript

Razem 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.

challenge icon

Wyzwanie

Łatwy

Utwó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:

  1. Odczytać dane wejściowe w postaci ciągu znaków reprezentującego nazwę projektu
  2. 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")
  3. 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")
  4. Utworzyć dwa osobne zbiory przechowujące umiejętności każdego członka zespołu
  5. Użyć metody union(), aby połączyć oba zestawy umiejętności w kompleksowy profil umiejętności projektu
  6. 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 successfully

Jeś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 successfully

Jeś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 successfully

Twó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.

REQUIRED OUTPUT FORMAT: [Your translated content here]

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
}
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator Dart online