Set 是无序不重复的集合,不能通过索引去获取值 ,Dart 为 Set 提供了 Set 字面量和 Set 类型。
提示 Dart 的核心部分虽然一直是Set 类型 ,但 Dart2.2中才引入 Set 字面量 。
接下来是通过字面量创建 Set 的一个简单示例:
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
Note: Dart 推断 halogens 类型为 set(String) 。假如为它添加一个 错误类型的值,那么分析器或执行时会抛出错误。更多内容,可以参考 类型推断。
要创建一个空集,使用前面带有类型参数的 {} ,或者将 {} 赋值给 Set 类型的变量:
var names = <String>{};
// Set<String> names = {}; // 这样也是可以的。
// var names = {}; // 这样会创建一个 Map ,而不是 Set 。
Set 字面量语法与 Map 字面量语法很相似。 因为Map 字面量语法是先有的 ,所以 {} 默认是 Map 类型。 如果 {} 上忘记注释类型或赋值到一个未声明类型的变量上, 那么 Dart 就会创建一个类型为 Map(dynamic, dynamic) 的对象。
已有的 Set 添加元素可用 add() 或 addAll() :
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
获取 Set 中元素的个数用 .length :
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
assert(elements.length == 5);
添加 const 在 Set 字面量前创建一个编译时 Set 常量:
final constantSet = const {
'fluorine',
'chlorine',
'bromine',
'iodine',
'astatine',
};
// constantSet.add('helium'); // Uncommenting this causes an error.