一、List

数组 (Array) 是几乎所有编程语言中最常见的集合类型,在 Dart 中数组由 List 对象表示。通常称之为 List
Dart 中 List 字面量看起来与 JavaScript 中数组字面量一样。下面是一个 Dart List 的示例:

  1. var list = [1,2,3,4];

备忘:
这里 Dart 推断出 list 的类型为 List,如果往该数组中添加一个非 int 类型的对象则会报错。你可以阅读 类型推断 获取更多相关信息。

Dart 在 2.3 引入了 扩展操作符(…)和 空感知扩展操作符(…?),它们提供了一种将多个元素插入集合的简洁方法。
例如,你可以使用扩展操作符(…)将一个 List 中的所有元素插入到另一个 List 中:

  1. var list = [1, 2, 3];
  2. var list2 = [0, ...list];
  3. print(list2);

如果扩展操作符右边可能为 null ,你可以使用 null-aware 扩展操作符(…?)来避免产生异常:

  1. var list;
  2. var list2 = [0, ...?list];
  3. print(list2);

Dart 还同时引入了 集合中的 if集合中的 for 操作,在构建集合时,可以使用条件判断 (if) 和循环 (for)。
下面示例是使用 集合中的 if 来创建一个 List 的示例,它可能包含 3 个或 4 个元素:

  1. var nav = [
  2. 'Home',
  3. 'Furniture',
  4. 'Plants',
  5. if (flag) 'Outlet' // 如果flag为真,那么nav中才会有'Outlet'这个元素
  6. ];

二、Set

在 Dart 中,set 是一组特定元素的无序集合。 Dart 支持的集合由集合的字面量和 Set 类提供。
下面是使用 Set 字面量来创建一个 Set 集合的方法:

  1. var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};

可以使用在 {} 前加上类型参数的方式创建一个空的 Set,或者将 {} 赋值给一个 Set 类型的变量:

  1. var mySet = <String>{};

Set 还是 map? Map 字面量语法相似于 Set 字面量语法。因为先有的 Map 字面量语法,所以 {} 默认是 Map 类型。如果忘记在 {} 上注释类型或赋值到一个未声明类型的变量上,那么 Dart 会创建一个类型为 Map 的对象。

image.pngimage.png
从 Dart 2.3 开始,Set 可以像 List 一样支持使用扩展操作符(… 和 …?)以及 Collection if 和 for 操作。你可以查阅 List 扩展操作符List 集合操作符 获取更多相关信息。

三、Maps

通常来说,Map 是用来关联 keys 和 values 的对象。其中键和值都可以是任何类型的对象。每个 只能出现一次但是 可以重复出现多次。 Dart 中 Map 提供了 Map 字面量以及 Map 类型两种形式的 Map。
创建Map
下面是一对使用 Map 字面量创建 Map 的例子:

  1. var gifts = {
  2. // Key: Value
  3. 'first': 'partridge',
  4. 'second': 'turtledoves',
  5. 'fifth': 'golden rings'
  6. };
  7. var nobleGases = {
  8. 2: 'helium',
  9. 10: 'neon',
  10. 18: 'argon',
  11. };

你也可以使用 Map 的构造器创建 Map:

  1. var gifts = Map<String, String>();
  2. gifts['first'] = 'partridge';
  3. gifts['second'] = 'turtledoves';
  4. gifts['fifth'] = 'golden rings';
  5. var nobleGases = Map<int, String>();
  6. nobleGases[2] = 'helium';
  7. nobleGases[10] = 'neon';
  8. nobleGases[18] = 'argon';