Menu
CoddyTech

集合交集

本课属于 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}

这个操作对于查找数据中的交集特别有用,例如用户的共同兴趣、团队共享的技能,或筛选操作中的匹配条件。交集可以帮你找出两个集合的共同内容,因此在比较和分析任务中很有价值。

challenge icon

挑战

简单

创建一个程序,通过查找两位用户的共同联系人来管理社交媒体平台。你的程序应:

  1. 读取一个表示第一位用户姓名的字符串输入
  2. 读取多个表示第一位用户联系人姓名的字符串输入(收到 "user1_done" 时,输入结束)
  3. 读取一个表示第二位用户姓名的字符串输入
  4. 读取多个表示第二位用户联系人姓名的字符串输入(收到 "user2_done" 时,输入结束)
  5. 创建两个独立的集合,分别存储每位用户的联系人
  6. 使用 intersection() 方法查找两位用户的共同联系人
  7. 按照下方所示的确切格式打印联系人分析结果

例如,如果第一位用户是 "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");
  // 在这里添加你的输出语句
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程控制中的所有课

自己练习: Dart 在线编译器