代码将解释所有:
//modal for list
class MyModal
{
int myField1;
List<MyModal> adjacentNodes;
MyModal(this.myField1)
{
adjacentNodes= new List<MyModal>();
}
}
//pre code
List<MyModal> originalList = new List<MyModal>();
originalList.add(new MyModal(1,"firstBuddy"));
//copying list
List<MyModal> secondList = new List<MyModal>();
secondList.addAll(originalList);
//Modifing copy list
secondList.adjacentNodes.add(new MyModal(2,"anotherBuddy"));
//Also modifies original list
print(originalList[0].childs.length); //prints 1, it should prints 0
Run Code Online (Sandbox Code Playgroud)
如何在第二个列表中执行更改而不影响原始列表?
提前致谢!
mos*_*eim 23
您可以使用 List.from() 函数。试试这个代码:
//modal for list
class MyModal {
int myField1;
String name;
List<MyModal> adjacentNodes;
MyModal(this.myField1, this.name) {
adjacentNodes = new List<MyModal>();
}
}
void runCopy() {
//pre code
List<MyModal> originalList = new List<MyModal>();
originalList.add(new MyModal(1, "firstBuddy"));
//copying list
List<MyModal> secondList = List.from(originalList);
secondList.addAll(originalList);
print(originalList);
print(secondList);
}
Run Code Online (Sandbox Code Playgroud)
该建议的方法是使用.toList或列表文字。
List<int> source = [1];
List<int> copied = source.toList();
List<int> copied2 = [...source];
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,List.from() 和 List.of() 不起作用。我必须映射当前列表,从而创建一个新实例。
List<CompanyBranchesDTO> get companyBranchesCopy {
return companyBranches.map((e) =>
CompanyBranchesDTO(id: e.id, name: e.name, isChecked: e.isChecked))
.toList();
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以在需要的地方注入一个新实例。
class MyModal {
int myField1;
String myField2;
List<MyModal> adjacentNodes;
MyModal(this.myField1,this.myField2);
MyModal.clone(MyModal source) :
this.myField1 = source.myField1,
this.myField2 = source.myField2,
this.adjacentNodes = source.adjacentNodes.map((item) => new MyModal.clone(item)).toList();
}
var secondList = originalList.map((item) => new MyModal.clone(item)).toList();
Run Code Online (Sandbox Code Playgroud)
如果成员MyModal是非原始类型等String,int,double,num,bool,则clone()方法需要克隆引用指向以及实例。
我认为对于您的用例而言,使用不可变值是一种更好的方法,例如使用https://pub.dartlang.org/packages/built_value
| 归档时间: |
|
| 查看次数: |
3307 次 |
| 最近记录: |