如何在 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();
我是 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();