是否可以在Dart中的一行初始化List?(它在c#中称为集合初始值设定项)

atr*_*eon 13 dart

是否可以在Dart中的一行初始化列表?像下面这样的东西......

List<int> options = new List<int>{ 1,2,5,9 };
Run Code Online (Sandbox Code Playgroud)

(这在c#中是可能的并且被称为集合初始化器)

小智 19

是的,您可以使用List.unmodifiable构造函数来实现:

var options  = new List.unmodifiable([3,6,7,8]);
Run Code Online (Sandbox Code Playgroud)

或者通过使用 List.from构造函数:

var options  = new List.from([3,6,7,8]);
Run Code Online (Sandbox Code Playgroud)

或者就像这样:

var options  = [5,7,9,0];
Run Code Online (Sandbox Code Playgroud)


mil*_*oss 5

还有可用的List.filledList.generate工厂构造函数:

List<int?> s = List.filled(5, 10, growable: true); // [10, 10, 10, 10, 10]
Run Code Online (Sandbox Code Playgroud)

这将创建长度为 5、类型为 int 或 null 的列表,并将每个元素初始化为 10。该列表是可增长的,这意味着可以使用 setter 更改其长度:

s.length = 10;
s[8] = 2;  // [10, 10, 10, 10, 10, null, null, null, 2, null]
Run Code Online (Sandbox Code Playgroud)

更改列表长度后,新元素将被初始化为 null。如果列表元素类型不可为空,这将导致异常。

List.generate生成值列表。

var n = List.generate(5, (index) => 0); // [0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

创建的列表是固定长度的,每个元素设置为0。

List<int?> n = List.generate(5, (index) => index * index, growable: true); // // [0, 1, 4, 9, 16]
Run Code Online (Sandbox Code Playgroud)

如果我们想创建可增长列表(即我们将growable设置为true),我们需要显式选择不可为空的类型,例如。整数?正如我们在这里所做的那样,否则增加列表长度将引发异常。这代表 List.generate 和 List.filled 工厂。

关于这些的好读物是:

https://api.dart.dev/stable/1.24.3/dart-core/List/List.generate.htmlhttps://api.dart.dev/stable/1.24.3/dart-core/List/列表.filled.html