【发布时间】:2021-08-31 12:56:02
【问题描述】:
是否可以在 Dart 的一行中初始化一个列表?类似于以下内容...
List<int> options = new List<int>{ 1,2,5,9 };
(这在 c# 中是可能的,称为集合初始化器)
【问题讨论】:
标签: dart
是否可以在 Dart 的一行中初始化一个列表?类似于以下内容...
List<int> options = new List<int>{ 1,2,5,9 };
(这在 c# 中是可能的,称为集合初始化器)
【问题讨论】:
标签: dart
是的:
List<int> options = [1, 2, 5, 9];
我建议阅读:
【讨论】:
是的,您可以使用 List.unmodifiable 构造函数来实现:
var options = new List.unmodifiable([3,6,7,8]);
或者通过使用List.from 构造函数:
var options = new List.from([3,6,7,8]);
或者像这样:
var options = [5,7,9,0];
【讨论】:
还有可用的 List.filled 和 List.generate 工厂构造函数:
List<int?> s = List.filled(5, 10, growable: true); // [10, 10, 10, 10, 10]
这将创建长度为 5 的列表,类型为 int 或 null,并用 10 初始化每个元素。此列表是可增长的,这意味着可以使用 setter 更改其长度:
s.length = 10;
s[8] = 2; // [10, 10, 10, 10, 10, null, null, null, 2, null]
更改列表长度后,新元素将被初始化为 null。如果列表元素类型不可为空,则会导致异常。
List.generate 生成一个值列表。
var n = List.generate(5, (index) => 0); // [0, 0, 0, 0, 0]
创建的列表是定长的,每个元素都设置为0。
List<int?> n = List.generate(5, (index) => index * index, growable: true); // // [0, 1, 4, 9, 16]
如果我们想创建可增长的列表(即我们将 growable 设置为 true),我们需要明确选择不可为空的类型,例如。 int? 就像我们在这里所做的那样,否则增加列表长度会引发异常。这代表 List.generate 和 List.filled 工厂。
关于这些的好读物是:
https://api.dart.dev/stable/1.24.3/dart-core/List/List.generate.html 和 https://api.dart.dev/stable/1.24.3/dart-core/List/List.filled.html
【讨论】:
var vals = <int>[1, 2, 3];
var vals2 = List<int>()..addAll([1, 2, 3]);
var vals3 = List<int>.of([1, 2, 3]);
请注意,当我们不提供类型时,我们实际上创建了一个
动态类型。此外,new 关键字是可选的。
【讨论】:
方括号定义List
var listOfInt = [1,2,3]
大括号定义Set
var setOfInt = {1,2,3};
带冒号的大括号定义Map
var mapOfIntString = {1: "a", 2: "b"};
可以明确指定类型。
var list = <int>[1,2,3]
var setOfInt = <int>{1,2,3};`
var map = <int,String>{1: "a", 2: "b"};
【讨论】: