为什么这个dart函数改变了变量匹配的值?



我不明白:

//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;
}

最新更新