固定长度多维列表中的Dart奇怪行为

  • 本文关键字:Dart 列表 flutter dart
  • 更新时间 :
  • 英文 :


我对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]]解释为什么它以这种方式工作和一个可能的方法来修复它是非常赞赏的谢谢你

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

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

不要犹豫去阅读List的文档,因为它基本上告诉了同样的事情:)List。填写文档

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

来自List.filled文档:

所有元素共享相同的填充值

var shared = List.filled(3, []);
shared[0].add(499);
print(shared);  // => [[499], [499], [499]]

可以使用List。生成一个固定长度的列表,每个位置都有一个新对象。

var unique = List.generate(3, (_) => []);
unique[0].add(499);
print(unique); // => [[499], [], []]

最新更新