我不明白:
//Globals variables
List<int> results = [1,1];
List<List<int>> matches = [[1,3],[2,4]];
void main() {
print("before");
print(matches); //output: [[1,3],[2,4]]
List<int> losers = getEliminatedPlayer(matches);
print("after");
print(matches); //output: [[3],[4]]
}
List<int> getEliminatedPlayer(List<List<int>> matches) {
List<List<int>> losers = matches;
for (var i = 0; i < losers.length; i++) {
losers[i].remove(losers[i][results[i] - 1]);
}
var flattened = losers.expand((loser) => loser).toList();
print(flattened);
return flattened;
}
为什么即使我不工作在匹配变量itchanges?我怎样才能避免呢?
List losers = matches
不复制匹配列表,而只是给它一个指向完全相同列表的附加变量。因此,对任何一个变量所做的更改都会反映在两个变量中。要解决这个问题,你需要做一个深拷贝。在您的情况下,您可以这样做:
List getEliminatedPlayer(List matches) {
List losers = matches.map((e) => e.toList()).toList();
for (var i = 0; i < losers.length; i++) {
losers[i].remove(losers[i][results[i] - 1]);
}
var flattened = losers.expand((loser) => loser).toList();
print(flattened);
return flattened;
}