首页 > 解决方案 > 固定长度多维列表中的 Dart 奇怪行为

问题描述

我对飞镖有点陌生,想创建一个多维列表,该列表将在一个循环中填充,但注意到奇怪的行为:

import 'dart:core';

void main() {
  final List<List<int>> list = List.filled(3, []);
  list[0].add(1);
  list[1].add(2);
  list[2].add(3);
  print(list);
}

[[1, 2, 3], [1, 2, 3], [1, 2, 3]]我希望看到输出[[1], [2], [3]]解释为什么它会以这种方式工作以及修复它的可能方法非常感谢谢谢

标签: flutterdart

解决方案


那是因为.filled()不会创建要填充的新值,而只是对列表中的所有项目使用相同的值。
所以所有 3 个列表都引用同一个列表对象。
使用.generate()创建单独的列表:

final List<List<int>> list = List.generate(3, (_) => <int>[]);

并且不要犹豫阅读 List 的文档,因为它基本上说明了同样的事情 :) List.filled Docs

创建列表的所有元素共享相同的填充值。您可以使用 List.generate 创建一个具有固定长度的列表,并在每个位置创建一个新对象。


推荐阅读