flutter - 固定长度多维列表中的 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.filled Docs
创建列表的所有元素共享相同的填充值。您可以使用 List.generate 创建一个具有固定长度的列表,并在每个位置创建一个新对象。
推荐阅读
- r - 稳健的独立 T 检验
- haskell - Haskell cabal repl - 错误:变量不在范围内:主要
- r - 在R中导出300dpi tiff的情节图
- javascript - 作为 API 调用 Chrome 扩展的结果注入 html
- python - 在代码中组织 Redis 数据结构的最佳实践
- xamarin.forms - 如何刷新对象?
- sql-server - SQL Server:如何为每个 GROUP 获取 DISTINCT COUNT
- go - HTTP请求后如何使用pprof查看Web服务器的内存使用情况
- docker - 将 docker-compose 与 docker context 命令一起使用
- d - 向 RedBlackTree 添加自定义类型