在Flutter/Dart中创建一个二维数组

15

我刚接触flutter和dart。我在谷歌上搜索,但只能找到如何在flutter中创建一维列表的信息。我需要一个数值图表。

具体来说,我需要一个长度为12的行和长度为31的列,填充着升序数字。

1,  32,  63,

2,  33,  64, 

3,  34,  65,  etc....
感谢!
11个回答

22
  int row = 3;
  int col = 4;

  var twoDList = List<List>.generate(row, (i) => List<dynamic>.generate(col, (index) => null, growable: false), growable: false);

  //For fill;
  twoDList[0][1] = "deneme";

  print(twoDList);

// [[null, deneme, null, null], [null, null, null, null], [null, null, null, null]]

你的二维列表有3行4列。

类“List”没有未命名的构造函数。 - amit.flutter
请问您能否分享最新的代码? - amit.flutter

7

声明并初始化一个矩阵x,它有m行n列,包含实数。

var x = new List.generate(m, (_) => new List(n));

6

3

要在 dart声明初始化 二维数组 2D,可以使用以下语法:

  List<List<int>> a = 
  [
    [10,   2,  4,  6,  -2],
    [ 1, -16,  6, -2,  -5],
    [ 0,   3, 10, -5,   1],
    [ 0,  -4,  1, 18,   2],
    [ 3,   1,  2,  2, -14],
  ];

3
为了得到你想要的精确内容,你可以使用双重 List.generate,即:
const cols = 31;
const rows = 12;
final array = List.generate(rows,
    (i) => List.generate(cols + 1, (j) => i + j * cols + 1, growable: false),
    growable: false);

array.forEach((row) {
  print(row);
});
// [1, 32, 63, ...
// [2, 33, 64, ...
// [3, 34, 65, ...
// ...

还有List.filled,您可以在创建时用一些初始值来填充数组。以下是使用0初始化2d数组。

final array = List.generate(rows + 1, (i) => List.filled(cols + 1, 0, growable: false), growable: false);

这实际上非常聪明。虽然可能会更复杂,但List.filled()确实非常方便。谢谢分享! - Yo Apps

1
也许我们可以简单地创建可复用的Dart代码。
void main(List<String> arguments) {
  var list = createDimensionList(4, 5);
  list[0][0] = 6;
  print(list);
  list[1][0] = 4;
  print(list);
}

List<List<int>> createDimensionList(int rows, int columns,
    {bool growable = false}) {
  final columnLength = List<int>.filled(columns, 0, growable: growable);
  var dataList =
      List.generate(rows, (i) => columnLength.toList(), growable: growable);
  return dataList;
}

//Output
[[6, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
[[6, 0, 0, 0, 0], [4, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

0

只需使用这个语句,我遇到了同样的问题,已经解决了

var list1 = List.generate(12,(i) => List.generate(31, (j) =>{Your equation to genearte })));

0

要初始化一个填充了0的二维矩阵:

List.generate(numberRows, (_) => List.filled(numberColumns, 0));

0
我会使用嵌套的集合-for
const maxRows = 31;
const maxColumns = 12;
var matrix = [
  for (var row = 0; row < maxRows; row += 1)
    [for (var column = 0; column < maxColumns; column += 1)
      1 + row + column * maxRows],
];

0
void main() {
  List<dynamic> myArray = nd([12, 31])!;

  print(myArray);
}

List? nd(List<int> dimensions) {
  if (dimensions.isEmpty) {
    return null;
  } else {
    return List.filled(dimensions[0], nd(dimensions.sublist(1)));
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接