集合交集
本课属于 Coddy Dart 学习旅程的“逻辑与流程控制”单元。第 23 课,共 65 课。
当你需要查找两个 Set 集合中都存在的元素时,intersection() 方法正好可以解决这个问题。此操作会找出两个集合中的共同元素,并创建一个新集合,其中只包含同时出现在两个原始集合中的元素。
intersection() 方法通过比较两个集合中的元素来工作,并返回一个只包含共有值的新集合。和其他集合运算一样,它会自动处理唯一性,因此每个共有元素在结果中只会出现一次。
Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};
Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends); // {Charlie, Diana}这个操作对于查找数据中的交集特别有用,例如用户的共同兴趣、团队共享的技能,或筛选操作中的匹配条件。交集可以帮你找出两个集合的共同内容,因此在比较和分析任务中很有价值。
挑战
简单创建一个程序,通过查找两位用户的共同联系人来管理社交媒体平台。你的程序应:
- 读取一个表示第一位用户姓名的字符串输入
- 读取多个表示第一位用户联系人姓名的字符串输入(收到
"user1_done"时,输入结束) - 读取一个表示第二位用户姓名的字符串输入
- 读取多个表示第二位用户联系人姓名的字符串输入(收到
"user2_done"时,输入结束) - 创建两个独立的集合,分别存储每位用户的联系人
- 使用
intersection()方法查找两位用户的共同联系人 - 按照下方所示的确切格式打印联系人分析结果
例如,如果第一位用户是 "Alice",联系人有 "Bob"、"Charlie"、"Diana"、"Eve",第二位用户是 "Bob",联系人有 "Alice"、"Charlie"、"Frank"、"Diana",你的程序应输出:
User Analysis: Finding mutual connections
Alice's connections: {Bob, Charlie, Diana, Eve}
Bob's connections: {Alice, Charlie, Frank, Diana}
Mutual connections: {Charlie, Diana}
Total mutual connections: 2
Connection strength: Strong (2+ mutual connections)
Status: Users have mutual connections如果第一位用户是 "Sarah",联系人有 "John"、"Mike"、"Lisa",第二位用户是 "Tom",联系人有 "Emma"、"David"、"Kate",你的程序应输出:
User Analysis: Finding mutual connections
Sarah's connections: {John, Mike, Lisa}
Tom's connections: {Emma, David, Kate}
Mutual connections: {}
Total mutual connections: 0
Connection strength: None (no mutual connections)
Status: Users have no mutual connections如果第一位用户是 "Emma",联系人有 "Alex"、"Jordan"、"Taylor"、"Morgan",第二位用户是 "Jordan",联系人有 "Emma"、"Taylor"、"Casey",你的程序应输出:
User Analysis: Finding mutual connections
Emma's connections: {Alex, Jordan, Taylor, Morgan}
Jordan's connections: {Emma, Taylor, Casey}
Mutual connections: {Taylor}
Total mutual connections: 1
Connection strength: Weak (1 mutual connection)
Status: Users have mutual connections你的程序必须使用 intersection() 方法查找两个用户集合中的共同联系人。根据共同联系人的数量判断联系强度:共同联系人为 0 人时显示 "None",恰好有 1 人时显示 "Weak",有 2 人或更多时显示 "Strong"。如果有共同联系人,状态显示 "Users have mutual connections",否则显示 "Users have no mutual connections"。
亲手试试
import 'dart:io';
void main() {
// 读取第一个用户的姓名
String? user1Name = stdin.readLineSync();
// 读取第二个用户之前的第一个用户's connections,直到遇到 "user1_done"
Set<String> user1Connections = <String>{};
String? connection;
while ((connection = stdin.readLineSync()) != "user1_done") {
if (connection != null) {
user1Connections.add(connection);
}
}
// 读取第二个用户的姓名
String? user2Name = stdin.readLineSync();
// 读取第二个用户's connections,直到遇到 "user2_done"
Set<String> user2Connections = <String>{};
while ((connection = stdin.readLineSync()) != "user2_done") {
if (connection != null) {
user2Connections.add(connection);
}
}
// TODO:在下方编写你的代码
// 使用 intersection() 方法找出共同联系人
// 根据共同联系人的数量确定联系强度
// 生成符合要求的输出格式
// 输出分析结果
print("User Analysis: Finding mutual connections");
// 在这里添加你的输出语句
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程控制中的所有课
自己练习: Dart 在线编译器