如何在 Dart 中创建矩阵?

Mag*_*s W 2 collections dart flutter

我有一个List<String>,我想创建一个Set<String>与长度相同维度的方阵(二维数组/列表)List<String>.

我尝试使用

List.filled(entries.length, List.filled(entries.length, Set<String>()));
Run Code Online (Sandbox Code Playgroud)

但问题是,我的矩阵的每一行似乎都指向同一个列表实例,因此更改一行中的值也会更改所有其他行中的值。

所以我尝试了

List.filled(entries.length, List.from(List.filled(entries.length, Set<String>())));
Run Code Online (Sandbox Code Playgroud)

但我仍然有同样的问题。最终我投降并诉诸于

List<List<Set<String>>> matrix = [];

for(int i=0; i<entries.length; i++) {
    List<Set<String>> row = [];
    for (int n = 0; n<entries.length; n++) {
        row.add(Set<String>());
    }
    matrix.add(row);
}
Run Code Online (Sandbox Code Playgroud)

它有效,但它很丑陋。有没有更干净的方法来做到这一点?

Ale*_*uin 5

List.generate(n, (_) => List.generate(n, (_) => <String>{}));
Run Code Online (Sandbox Code Playgroud)

  • 使用新的列表文字语法,您甚至可以执行以下操作:`List&lt;List&lt;Set&lt;String&gt;&gt;&gt; matrix = [for (var _ in entries) [ for (var _ in entries) {} ]];` 或 `。 .. = [for (int i = 0; i &lt; n; i++) [ for (var j = 0; j &lt; n; j++) {}]];`. (2认同)