代码之家  ›  专栏  ›  技术社区  ›  WSBT

DART-如何初始化锯齿状数组?

  •  0
  • WSBT  · 技术社区  · 7 年前

    我正在尝试初始化一个锯齿状的零数组。我想 List::filled 是该走的路,但我错了。

    void main() {
      List<List<int>> matrix = new List.filled(4, new List<int>.filled(4, 0));
      print('before: $matrix');
      matrix[2][3] = 1; // change a single cell
      print('after: $matrix');
    }
    

    输出不正确。尽管 new 关键字,DART重用子列表:

    在:【0,0,0,0】,【0,0,0】,【0,0,0】,【0,0】,【0,0,0】之前
    之后:[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]

    初始化交错数组的正确方法是什么,这样每个子数组就不仅仅是指向同一列表的指针?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Rémi Rousselet    7 年前

    使用 List.generate 而不是 List.filled 如果每个索引都有唯一的值:

    var matrix = List.generate(4, (_) => List.filled(4, 0));