在 Dart 文档中,我们提供了三个可迭代选项来创建列表。哪一个最适合什么目的,哪一个对于什么目的更有效?
lrn*_*lrn 13
基本上,您永远不应该使用任何这些构造函数。
每种都有其用途,但现在大多数用途都可以使用列表文字来编写。
是List.generate的对应项List.filled。后者创建一个在每个槽中填充相同值的列表,前者允许您为每个槽计算新值。对于 collection-for,我可能会写:
var newList = [for (var i = 0; i < 10; i++) compute(i)];
Run Code Online (Sandbox Code Playgroud)
代替
var newList = List.generate(10, compute);
Run Code Online (Sandbox Code Playgroud)
(如果我可以内联该函数,则更是如此compute)。一种generate有意义的情况是创建一个固定长度的列表。字面意思是做不到这一点的。
我还想说你永远不应该使用List.of(something). 使用something.toList()或[...something]代替。如果您需要向上转换,例如List<num>从 an创建 a Iterable<int>,您可以执行<num>[...something],但不能使用toList。如果您需要制作固定长度 List<num>,...那么我认为List<num>.of(something, growable: false)实际上是最简单的解决方案。
使用的唯一原因List.from是当原始可迭代对象没有所需的严格类型时。如果您知道您Iterable<num>只包含整数,您可能想要这样做List<int>.from(iterable)。您也可以执行iterable.cast<int>().toList()或[for (var v in iterable) v as int],但List.from可以更短。始终向 提供类型变量List.from。
因此,一般来说:如果您需要固定长度列表(传递growable: false),或者如果您想使用 向下转换元素List.from,然后始终提供类型参数,则仅使用这些构造函数之一。
否则使用列表文字。这可能也会更有效,因为它避免了一些函数调用。
| 归档时间: |
|
| 查看次数: |
3776 次 |
| 最近记录: |