Dart 的集合类型,最重要的是这三个:List
、Set
及 Map
。
字面值
他们有各自的字面值:
// List
var l1 = [1, 2, 3]; // 不带类型,编译器推断
var l2 = <int>[1, 2, 3]; // 带类型
// Set
var s1 = {1, 2, 3}; // 不带类型,编译器推断
var s2 = <int>{1, 2, 3}; // 带类型
// Map
var m1 = {1: 'a', 2: 'b'}; // 不带类型,编译器推断
var m2 = <int, String>{1: 'a', 2: 'b'}; // 带类型
由于 Set
和 Map
的字面值很相近,表达一个空 Set 和空 Map,需要额外的注意:
// 空 Map,m1 及 m2 等价;m3 带类型
var m1 = {};
var m2 = <dynamic, dynamic>{};
var m3 = <int, String>{};
// 空 Set
var s1 = <dynamic>{};
var s2 = <int>{};
Spread operator
Dart 也有类似 JS 的 spread operator,而且它还有 null-aware spread operator:
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
var list;
var list2 = [0, ...?list];
assert(list2.length == 1);
Collection if / for
这两个特性是语法糖,简单用可以,不要滥用。
collection if:
var nav = [
'Home',
'Furniture',
'Plants',
if (promoActive) 'Outlet'
];
collection for:
var listOfInts = [1, 2, 3];
var listOfStrings = [
'#0',
for (var i in listOfInts) '#$i'
];
assert(listOfStrings[1] == '#1');