我無法理解這一點:
//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;
}
為什么即使我不處理matches變數它也會改變?我怎樣才能避免它?
uj5u.com熱心網友回復:
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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/489963.html
上一篇:forEach->回傳真;//錯誤回傳型別'bool'不是'void',按要求
下一篇:顫振中的小部件名稱是什么
