Menu
CoddyTech

创建集合

本课属于 Coddy Dart 学习旅程的“逻辑与流程控制”单元。第 18 课,共 65 课。

现在你已经了解了 Set 是什么,接下来我们来学习如何创建一个。在 Dart 中,你可以使用花括号 {} 创建 Set,并用逗号分隔其中的元素,和数学集合的写法类似。

Set<String> colors = {'red', 'blue', 'green'};
print(colors);  // {red, blue, green}

不要把这种语法和创建 Map 混淆。虽然两者都使用花括号,但 Set 只包含值,而 Map 包含用冒号分隔的键值对。空的 Set 必须显式声明类型,以便与空的 Map 区分开。

Set<String> emptySet = <String>{};  // 空集合
Map<String, int> emptyMap = {};     // 空映射

你也可以创建一个包含重复值的 Set,但要记住,重复值会被自动移除,最终集合中只保留唯一元素。

challenge icon

挑战

简单

编写一个程序,通过为博客文章创建一个包含唯一标签的集合,来管理博客标签系统。你的程序应该:

  1. 读取一个表示博客文章标题的字符串输入
  2. 读取多个表示要添加到文章中的标签的字符串输入(收到 "done" 时结束输入)
  3. 创建一个字符串集合,用来存储唯一标签
  4. 将每个标签添加到集合中(重复项会自动移除)
  5. 按照下方显示的确切格式输出博客标签结果

例如,如果博客标题是 "Introduction to Dart Programming",标签依次为 "programming"、"dart"、"tutorial"、"programming"、"beginner",你的程序应该输出:

Blog Post: Introduction to Dart Programming
Tags added: [programming, dart, tutorial, programming, beginner]
Unique tags: {programming, dart, tutorial, beginner}
Total unique tags: 4
Status: Blog post tagged successfully

如果博客标题是 "Web Development Tips",标签依次为 "web"、"html"、"css"、"web"、"html"、"javascript",你的程序应该输出:

Blog Post: Web Development Tips
Tags added: [web, html, css, web, html, javascript]
Unique tags: {web, html, css, javascript}
Total unique tags: 4
Status: Blog post tagged successfully

如果博客标题是 "Getting Started",标签依次为 "guide"、"basics",你的程序应该输出:

Blog Post: Getting Started
Tags added: [guide, basics]
Unique tags: {guide, basics}
Total unique tags: 2
Status: Blog post tagged successfully

你的程序必须使用花括号 {} 语法创建集合,并演示集合如何自动移除重复项。先将所有输入的标签存储在列表中,以展示最初输入的内容,然后再创建集合,以显示唯一标签。集合应使用标准集合格式显示其内容,并以花括号括起来。

亲手试试

import 'dart:io';

void main() {
  // 读取博客文章标题
  String? title = stdin.readLineSync();
  
  // 读取标签,直到输入 "done"
  List<String> allTags = [];
  String? tag;
  while ((tag = stdin.readLineSync()) != "done") {
    if (tag != null) {
      allTags.add(tag);
    }
  }
  
  // TODO: 在这里编写你的代码
  // 根据标签列表创建集合,获取不重复的标签
  // 计算不重复标签的总数
  
  // 输出结果
  print("Blog Post: $title");
  print("Tags added: $allTags");
  // 以集合格式打印不重复的标签
  // 打印不重复标签的总数
  // 打印状态消息
}
quiz icon自我测试

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

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

自己练习: Dart 在线编译器