gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:52:25 26 4
gpt4 key购买 nike

我是Dart的新手,尝试更改循环中Object的成员值时遇到很多问题。

我的对象是这样定义的:

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:
List<Cell> newlist = items.map((item) => Cell.from(item)).toList();

关于dart - 如何在Dart中的循环中更改对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61159684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com