如何在 Dart 的循环中更改对象值

How to change object value in a loop in Dart

我是 Dart 的新手,我在尝试更改循环内对象的成员值时遇到了很多问题。

我的对象是这样定义的:

class Cell {
  int magicnum, x, y;

  Cell(this.magicnum);

  toString() {
    return ("$magicnum - [$x][$y]");
  }
}

我创建了一个单元格列表列表(二维数组),然后我需要根据每个对象在数组中的位置填充 x 和 y 值。

for (int x = 0; x < DIM; x++) {
    for (int y = 0; y < DIM; y++) {      
      grids[x][y].x = x;
      grids[x][y].y = y;      
    }
  }

这显然是行不通的,因为在 Dart 中所有东西(也是整数)都是一个对象,因此,我数组中的所有 Cell 对象都具有相同的 x 和 y 值(它们都得到了对同一个对象的引用)。 我该怎么办?

谢谢

@julemand101 数组是这样制作的:

List<Cell> cells = List<Cell>.generate(DIM, (i) => Cell(i + 1));
  List<List<Cell>> grids = List<List<Cell>>();

  for (int i = 0; i < DIM; i++) {
    grids.add(shuffleCell(cells));
  }

你的问题是你在执行以下操作时实际上并没有克隆每个 Cell 对象(摘自评论中的代码示例):

List<Cell> newlist = List<Cell>.from(items);

相反,您正在创建一个新的 List,其中包含与之前的项目列表相同的 Cell 对象引用。

要创建 Cell 个对象的副本,您需要实现一个克隆方法,例如:

class Cell {
  int magicnum, x, y;

  Cell(this.magicnum);

  Cell.from(Cell cell)
      : magicnum = cell.magicnum,
        x = cell.x,
        y = cell.y;
}

并执行以下操作以迭代旧列表的每个元素,为每个元素创建一个新的 Cell 对象并将结果转换为新的列表:

List<Cell> newlist = items.map((item) => Cell.from(item)).toList();