Dart 二維數(shù)組你可能會遇到的坑

在 Dart 中,沒有內(nèi)建的“二維數(shù)組”類型,但你可以用 List<List<T>> 來表示。下面是你可能會遇到這個坑?。?!

?? 注意:慎重這樣寫!

final matrix = List.filled(3, List.filled(4, 0));

這會導(dǎo)致所有行共享同一個內(nèi)部列表,修改一行會影響所有行。這么寫可能不符合你的預(yù)期,會浪費你寶貴的時間和精力。

?推薦用法

1. 固定大小的二維數(shù)組(例如 3 行 4 列,初始為 0)

void main() {
  final rows = 3;
  final cols = 4;

  final matrix = List.generate(
    rows,
    (_) => List.filled(cols, 0),
  );

  print(matrix);
  // [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
}

2. 可變大小的二維數(shù)組(可修改行列)

void main() {
  List<List<int>> matrix = [];

  // 添加一行
  matrix.add([1, 2, 3]);
  matrix.add([4, 5, 6]);

  print(matrix); 
  // [[1, 2, 3], [4, 5, 6]]
}

3. 從用戶輸入或文件初始化(示例)

void main() {
  final data = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
  ];

  final matrix = data.map((row) => List<int>.from(row)).toList();
  print(matrix[1][2]); 
  // 6
}

最后總結(jié)

場景 推薦寫法
固定大小 List.generate(rows, (_) => List.filled(cols, val))
動態(tài)添加 List<List<T>> matrix = []; matrix.add([...])
從用戶輸入或文件初始化 data.map((row) => List<int>.from(row)).toList();
?? 避免共享引用 ?? 不要用 List.filled(n, sameRow)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容