List

11 阅读2分钟

Dart List由逗号分隔的表达式或值列表表示,括在方括号 ( []) 中。这是一个简单的 Dart List:

var list = [1, 2, 3];

提示

Dart 推断其list类型为List<int>。如果您尝试将非整数对象添加到此列表,分析器或运行时会引发错误。

列表使用从零开始的索引,其中 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 中的集合是唯一项的无序集合。

这是一个使用集合字面量创建的简单 Dart 集合:

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

提示

Dart 推断其halogens类型为Set<String>。如果您尝试将错误类型的值添加到集合中,分析器或运行时会引发错误.

要创建空集,请{}在类型参数前面使用,或分配{}给类型的变量Set

var names = <String>{};
// Set<String> names = {}; // This works, too.
// var names = {}; // Creates a map, not a set.

Set还是Map?

映射字面量的语法与集合字面量类似。由于映射字面量先出现,因此{}默认为 类型Map。如果您忘记了 的类型注释{}或赋值给的变量,Dart 会创建一个 类型的对象Map<dynamic, dynamic>

使用add()addAll()方法将项目添加到现有集合:

var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);

Map

映射是一个将键和值关联起来的对象。键和值都可以是任何类型的对象。每个只出现一次,但你可以多次使用同一个。Dart 对映射的支持由映射字面量和类型提供Map

这里有几个使用地图文字创建的简单 Dart Map:

var gifts = {
  // Key:    Value
  'first': 'partridge',
  'second': 'turtledoves',
  'fifth': 'golden rings'
};

var nobleGases = {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};

可以使用 Map 构造函数创建相同的对象:

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

如果查找不在Map中的键,您将得到null以下结果:

var gifts = {'first': 'partridge'};
assert(gifts['fifth'] == null);