集合
Dart 内置支持列表、集合和映射 集合。 要了解有关配置集合包含的类型的更多信息,请查看 泛型.
列表
#也许几乎所有编程语言中最常见的集合是数组,或者是有序的对象组。 在 Dart 中,数组是 List
对象,因此大多数人称它们为列表。
Dart 列表字面量由用方括号 ([]
) 括起来的逗号分隔的表达式或值列表表示。 这是一个简单的 Dart 列表
var list = [1, 2, 3];
你可以在 Dart 集合字面量的最后一个项目后添加一个逗号。 这个尾部逗号不会影响集合,但它可以帮助防止复制粘贴错误。
var list = [
'Car',
'Boat',
'Plane',
];
列表使用从零开始的索引,其中 0 是第一个值的索引,list.length - 1
是最后一个值的索引。 你可以使用 .length
属性获取列表的长度,并使用下标运算符 ([]
) 访问列表的值
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);
list[1] = 1;
assert(list[1] == 1);
要创建作为编译时常量的列表,请在列表字面量之前添加 const
var constantList = const [1, 2, 3];
// constantList[1] = 1; // This line will cause an error.
有关列表的更多信息,请参阅 dart:core
文档 的列表部分。
集合
#Dart 中的集合是一个无序的唯一项目集合。 Dart 对集合的支持由集合字面量和 Set
类型提供。
这是一个简单的 Dart 集合,使用集合字面量创建
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
要创建一个空集合,请使用带有类型参数的 {}
,或将 {}
赋值给 Set
类型的变量
var names = <String>{};
// Set<String> names = {}; // This works, too.
// var names = {}; // Creates a map, not a set.
使用 add()
或 addAll()
方法将项目添加到现有集合中
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
使用 .length
获取集合中的项目数量
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
assert(elements.length == 5);
要创建一个作为编译时常量的集合,请在集合字面量之前添加 const
final constantSet = const {
'fluorine',
'chlorine',
'bromine',
'iodine',
'astatine',
};
// constantSet.add('helium'); // This line will cause an error.
有关集合的更多信息,请参阅 dart:core
文档 的集合部分。
映射
#一般来说,映射是一个将键与值关联起来的对象。 键和值都可以是任何类型的对象。 每个键只出现一次,但你可以多次使用相同的值。 Dart 对映射的支持由映射字面量和 Map
类型提供。
以下是一些简单的 Dart 映射,使用映射字面量创建
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
你可以使用映射构造函数创建相同的对象
var gifts = Map<String, String>();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
var nobleGases = Map<int, String>();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
使用下标赋值运算符 ([]=
) 将新的键值对添加到现有映射中
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // Add a key-value pair
使用下标运算符 ([]
) 从映射中检索 value
var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');
如果你查找映射中不存在的键,则会返回 null
var gifts = {'first': 'partridge'};
assert(gifts['fifth'] == null);
使用 .length
获取映射中键值对的数量
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);
要创建一个作为编译时常量的映射,请在映射字面量之前添加 const
final constantMap = const {
2: 'helium',
10: 'neon',
18: 'argon',
};
// constantMap[2] = 'Helium'; // This line will cause an error.
有关映射的更多信息,请参阅 dart:core
文档 的映射部分。
运算符
#展开运算符
#Dart 支持列表、映射和集合字面量中的展开运算符 (...
) 和空感知展开运算符 (...?
)。 展开运算符提供了一种简洁的方法将多个值插入集合中。
例如,你可以使用展开运算符 (...
) 将列表的所有值插入另一个列表中
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
如果展开运算符右侧的表达式可能为空,则可以使用空感知展开运算符 (...?
) 来避免异常
var list2 = [0, ...?list];
assert(list2.length == 1);
有关使用展开运算符的更多详细信息和示例,请参阅 展开运算符提案。
控制流运算符
#Dart 提供了集合 if 和集合 for,可在列表、映射和集合字面量中使用。 你可以使用这些运算符使用条件语句 (if
) 和重复 (for
) 来构建集合。
这是一个使用集合 if 创建包含三个或四个项目的列表的示例
var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];
Dart 还支持集合字面量内的 if-case
var nav = ['Home', 'Furniture', 'Plants', if (login case 'Manager') 'Inventory'];
这是一个使用集合 for 在将列表的项目添加到另一个列表之前操作它们的示例
var listOfInts = [1, 2, 3];
var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
assert(listOfStrings[1] == '#1');
有关使用集合 if
和 for
的更多详细信息和示例,请参阅 控制流集合提案。
除非另有说明,否则本网站上的文档反映了 Dart 3.5.3。 页面最后更新于 2024-04-11。 查看源代码 或 报告问题.