Dart 二维数组你可能会遇到的坑

在 Dart 中,没有内建的“二维数组”类型,但你可以用 List<List<T>> 来表示。下面是你可能会遇到这个坑!!!

⚠️ 注意:慎重这样写!

final matrix = List.filled(3, List.filled(4, 0));

这会导致所有行共享同一个内部列表,修改一行会影响所有行。这么写可能不符合你的预期,会浪费你宝贵的时间和精力。

✅推荐用法

1. 固定大小的二维数组(例如 3 行 4 列,初始为 0)

void main() {
  final rows = 3;
  final cols = 4;

  final matrix = List.generate(
    rows,
    (_) => List.filled(cols, 0),
  );

  print(matrix);
  // [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
}

2. 可变大小的二维数组(可修改行列)

void main() {
  List<List<int>> matrix = [];

  // 添加一行
  matrix.add([1, 2, 3]);
  matrix.add([4, 5, 6]);

  print(matrix); 
  // [[1, 2, 3], [4, 5, 6]]
}

3. 从用户输入或文件初始化(示例)

void main() {
  final data = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
  ];

  final matrix = data.map((row) => List<int>.from(row)).toList();
  print(matrix[1][2]); 
  // 6
}

最后总结

场景 推荐写法
固定大小 List.generate(rows, (_) => List.filled(cols, val))
动态添加 List<List<T>> matrix = []; matrix.add([...])
从用户输入或文件初始化 data.map((row) => List<int>.from(row)).toList();
⚠️ 避免共享引用 ⚠️ 不要用 List.filled(n, sameRow)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容