합집합
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨. 65개 중 22번째.
두 개의 별도 Set 컬렉션이 있을 때 union() 메서드를 사용하면 두 컬렉션의 모든 고유 요소를 포함하는 하나의 세트로 결합할 수 있습니다. 이 연산은 원래 세트 중 하나에 나타나는 모든 요소를 포함하는 새로운 세트를 생성합니다.
union() 메서드는 중복 항목을 자동으로 처리합니다. 동일한 요소가 두 집합에 모두 존재하면 결과로 생성되는 합집합에는 한 번만 나타나며, 집합은 고유한 값만 포함한다는 기본 속성을 유지합니다.
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}'JavaScript'가 두 원본 집합 모두에 나타나지만 합집합 결과에는 한 번만 나타나는 점에 주목하세요. 따라서 union()은 중복을 방지하면서 관련 컬렉션을 결합하는 데 매우 적합합니다. 예를 들어 기술 집합을 병합하거나, 사용자 권한을 결합하거나, 여러 소스의 데이터를 통합할 수 있습니다.
both 집합에 모두 나타나는 요소를 찾으려면 intersection() 메서드를 사용하세요. 공유되는 요소만 포함하는 새로운 집합을 반환합니다:
Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills); // {JavaScript}겹치는 요소 집합이 있으면 join() 메서드를 사용하여 이를 읽을 수 있는 문자열로 변환할 수 있습니다. 이는 List에서와 같은 방식으로 작동합니다. 지정한 구분 기호를 사용하여 모든 요소를 하나의 문자열로 결합합니다.
Set<String> overlap = frontendSkills.intersection(backendSkills);
String result = overlap.isEmpty ? 'None' : overlap.join(', ');
print(result); // JavaScriptunion(), intersection(), join()을 함께 사용하면 집합 데이터를 비교하고 표시하는 강력한 도구를 활용할 수 있습니다. 예를 들어 팀의 기술 집합을 결합하고 팀들이 이미 공유하는 기술을 파악할 수 있습니다.
챌린지
쉬움서로 다른 팀원의 기술 세트를 결합하여 종합적인 Project 기술 프로필을 만드는 전문 네트워킹 시스템을 관리하는 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다.
- Project 이름을 나타내는 문자열 입력을 읽습니다.
- 첫 번째 팀원의 기술을 나타내는 여러 문자열 입력을 읽습니다 (
"member1_done"을 받을 때 입력이 종료됩니다). - 두 번째 팀원의 기술을 나타내는 여러 문자열 입력을 읽습니다 (
"member2_done"을 받을 때 입력이 종료됩니다). - 각 팀원의 기술을 저장할 두 개의 별도 Set을 만듭니다.
union()method를 사용하여 두 기술 세트를 결합하고 종합적인 Project 기술 프로필을 만듭니다.- 아래에 표시된 정확한 형식으로 기술 결합 결과를 출력합니다.
예를 들어 Project 이름이 "Web Development Project"이고, 첫 번째 member의 기술이 "HTML", "CSS", "JavaScript", "React"이며, 두 번째 member의 기술이 "JavaScript", "Node.js", "MongoDB", "React"라면 프로그램은 다음을 출력해야 합니다.
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 successfullyProject 이름이 "Mobile App Development"이고, 첫 번째 member의 기술이 "Dart", "Flutter", "Firebase"이며, 두 번째 member의 기술이 "Swift", "iOS", "Xcode"라면 프로그램은 다음을 출력해야 합니다.
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 successfullyProject 이름이 "Data Science Project"이고, 첫 번째 member의 기술이 "Python", "Pandas", "NumPy", "SQL"이며, 두 번째 member의 기술이 "Python", "SQL", "Tableau", "Statistics"라면 프로그램은 다음을 출력해야 합니다.
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프로그램은 두 기술 세트를 결합하기 위해 반드시 union() method를 사용하여 중복 항목을 자동으로 처리하는 방법을 보여 주어야 합니다. 먼저 각 개별 기술 세트를 표시한 다음 결합된 결과를 표시하세요. 두 원본 세트에 모두 나타나는 기술을 찾아 겹치는 기술을 식별하세요. 겹치는 기술이 없으면 겹치는 기술 줄에 "None"을 표시하세요.
직접 해보기
import 'dart:io';
void main() {
// 프로젝트 이름 읽기
String? projectName = stdin.readLineSync();
// 첫 번째 팀원의 스킬 읽기
Set<String> member1Skills = <String>{};
String? skill;
while ((skill = stdin.readLineSync()) != "member1_done") {
if (skill != null) {
member1Skills.add(skill);
}
}
// 두 번째 팀원의 스킬 읽기
Set<String> member2Skills = <String>{};
while ((skill = stdin.readLineSync()) != "member2_done") {
if (skill != null) {
member2Skills.add(skill);
}
}
// TODO: 아래에 코드를 작성하세요
// union() 메서드를 사용하여 두 스킬 세트를 결합하세요
// Find overlapping skills between the two sets
// Calculate total unique skills
// 결과를 필요한 형식으로 출력하세요
print("Project: $projectName");
print("Team Member 1 skills: $member1Skills");
print("Team Member 2 skills: $member2Skills");
// Print combined skills, total count, overlapping skills, and status
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구직접 연습해 보세요: 온라인 Dart 컴파일러