我想在一个列表中添加多个列表。外循环的长度为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]]
我该如何实现?
答案 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]);