You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart二维列表更新异常求助:所有行值被重复覆盖

Dart二维列表更新时所有行被最后一行覆盖的问题分析与解决

问题根源

你创建二维列表的方式存在关键问题:

List<List<String>> InitialBoard1 =
    List.filled(8, List.filled(8, "a", growable: false), growable: false);

List.filled的第二个参数是同一个固定对象——这里就是List.filled(8, "a")生成的单个列表实例。所以InitialBoard1里的8个元素,本质上都是指向同一个子列表的引用。

当你循环修改InitialBoard1[i-1][j]时,每次操作都是在修改这个唯一的子列表。后续循环会覆盖之前的修改内容,最终所有行自然都会显示最后一次循环的结果。

解决方案

改用List.generate创建二维列表,它会为每个索引单独生成新的子列表,彻底避免引用复用:

var PieceMap2 = {
  0: "a",
  1: "b",
  2: "c",
  3: "d",
  4: "e",
  5: "f",
  6: "g",
  7: "h"
};
// 用List.generate生成每个独立的子列表
List<List<String>> InitialBoard1 =
    List.generate(8, (_) => List.filled(8, "a", growable: false), growable: false);
void main() {
  for (int i = 8; i > 0; i--) {
    for (int j = 0; j <= 7; j++) {
      String a = PieceMap2[j] ?? "null";
      String b = '$i';
      String c = a + b;
      print(c);
      InitialBoard1[i - 1][j] = c;
    }
    print(InitialBoard1[i - 1]);
  }
  for (int i = 0; i < 8; i++) {
    print(InitialBoard1[i]);
  }
}

验证结果

修改后运行代码,最终输出会和你的预期完全一致:每行分别对应a1-h1、a2-h2直到a8-h8,不会再出现所有行被最后一行覆盖的问题。

内容的提问来源于stack exchange,提问作者Dragomir despard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:10:20