在dart中,如何在列表中添加多个列表?

时间:2020-08-06 16:33:38

标签: flutter dart

我想在一个列表中添加多个列表。外循环的长度为2 并且内部循环的长度为2。

List matchName = [];
List a = [];
List b = [];
void getMatchName(GetUserMatchModelRes m) {
  matchName.clear();
  for (var i = 0; i < m.ObjectList.length; i++) {
    matchName.clear();
    matchName.add(
      m.ObjectList[i].ContactName,
    );
    print("i:$i");
    for (var j = 0; j < m.ObjectList[i].ContactPhones.length; j++) {
      print("j:$j");
      matchName.add(
        m.ObjectList[i].ContactPhones[j].MatchedContactName,
      );
    }
   a.add(matchName);
   print(a);
  }
}

外部循环为0时的输出:[[a,b,c]]

外部循环为1时:[[d,e,f],[d,e,f]]

但是我想要[[a,b,c],[d,e,f]]

我该如何实现?

1 个答案:

答案 0 :(得分:0)

您实际上是在做:

var outer = <List<String>>[];
var inner = ['foo'];

outer.add(inner);
outer.add(inner);

现在outer有两个引用 same 对象的元素:

       +---+---+
outer: |   |   |
       +-|-+-|-+
         |   |
         v   v
       +-------+
inner: | 'foo' |
       +-------+     

如果您修改inner,则会在outer[0]outer[1]中看到更改。

为避免这种情况,您需要添加 separate 对象,以便可以独立修改它们。创建新列表以添加而不是修改现有列表:

var outer = <List<String>>[];

outer.add(['foo']);
outer.add(['foo']);

或添加副本:

var outer = <List<String>>[];
var inner = ['foo'];

outer.add([...inner]);
outer.add([...inner]);