集合并集
本课属于 Coddy Dart 学习旅程的“逻辑与流程控制”单元。第 22 课,共 65 课。
当你有两个独立的 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() 就非常适合合并相关集合,同时确保没有重复项,例如合并技能集合、合并用户权限,或整合多个来源的数据。
要查找同时出现在两个集合中的元素,请使用 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); // JavaScript结合使用 union()、intersection() 和 join(),你就能获得强大的工具来比较和展示集合数据,例如合并团队的技能集合,并找出他们已经共有的技能。
挑战
简单创建一个程序,通过合并不同团队成员的技能集合来管理职业社交系统,并创建全面的项目技能档案。你的程序应该:
- 读取一个表示项目名称的字符串输入
- 读取多个表示第一位团队成员技能的字符串输入(收到
"member1_done"时,输入结束) - 读取多个表示第二位团队成员技能的字符串输入(收到
"member2_done"时,输入结束) - 创建两个独立的集合,分别存储每位团队成员的技能
- 使用
union()方法合并两个技能集合,创建全面的项目技能档案 - 按照下方所示的确切格式打印技能合并结果
例如,如果项目名称是 "Web Development Project",第一位成员的技能是 "HTML"、"CSS"、"JavaScript"、"React",第二位成员的技能是 "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 successfully如果项目名称是 "Mobile App Development",第一位成员的技能是 "Dart"、"Flutter"、"Firebase",第二位成员的技能是 "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 successfully如果项目名称是 "Data Science Project",第一位成员的技能是 "Python"、"Pandas"、"NumPy"、"SQL",第二位成员的技能是 "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() 方法合并两个技能集合,以展示它如何自动处理重复项。先显示各自的技能集合,再显示合并结果。通过找出同时出现在两个原始集合中的技能,识别所有重叠技能。如果没有重叠技能,在重叠技能这一行显示 "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() 方法合并两个技能集合
// 找出两个集合中重叠的技能
// 计算不重复的技能总数
// 按要求的格式输出结果
print("Project: $projectName");
print("Team Member 1 skills: $member1Skills");
print("Team Member 2 skills: $member2Skills");
// 打印合并后的技能、技能总数、重叠的技能和状态
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程控制中的所有课
自己练习: Dart 在线编译器