Как изменить значение объекта в al oop в Dart - PullRequest
0 голосов
/ 11 апреля 2020

Я полный новичок ie в Dart, и у меня много проблем при попытке изменить значение члена Object внутри al oop.

Мой объект так определен :

class Cell {
  int magicnum, x, y;

  Cell(this.magicnum);

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

Я создаю список списка ячеек (массив 2d), а затем мне нужно заполнить значения 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));
  }

1 Ответ

1 голос
/ 11 апреля 2020

Ваша проблема в том, что вы на самом деле не клонируете каждый 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...