dart - 我如何创建列表的副本当 T 是对象时在飞镖中,请参见下面的代码
问题描述
在https://dartpad.dartlang.org/编辑器中,我在下面输入以测试我的问题。
根据我的测试显然 list.from 函数仅在 T 不是对象/类时创建一个新副本
我为 List 测试了 list.from,它的作用类似于魅力,但不是类/对象。
请让我知道如何在下面的代码中创建 T 列表的新副本,这样当我们在一个地方更改列表时,另一个地方不会改变。
谢谢
void main() {
List<Status> statuses = <Status>[
Status(name: 'Confirmed', isCheck: true),
Status(name: 'Cancelled', isCheck: true),
];
print('statuses = ${statuses.toList().map((x) => x.name + '=' + x.isCheck.toString())}');
//this supposed to create a new list of T but apparently only work for non-object
List<Status> otherStatuses = new List<Status>.from(statuses);
print('otherStatuses= ${otherStatuses.toList().map((x) => x.name + '=' + x.isCheck.toString())}');
otherStatuses.singleWhere((x)=>x.name=='Cancelled').isCheck=false;
print('after the changes only on otherStatuses');
print('statuses = ${statuses.toList().map((x) => x.name + '=' + x.isCheck.toString())}');
print('statuses2 = ${otherStatuses.toList().map((x) => x.name + '=' + x.isCheck.toString())}');
print('why the original status (cancelled) equal to false?');
}
class Status {
String name;
bool isCheck;
Status({
this.name,
this.isCheck,
});
}
解决方案
要创建新元素列表,请使用map()
您已在代码中用于其他目的的函数:
List<Status> otherStatuses = statuses.map((status)=>Status(name:status.name, isCheck:status.isCheck)).toList()
推荐阅读
- owl - 如何使用不同的 ModelSpec 将 JENA OntModel 克隆到另一个
- python - Django 迁移后“没有要应用的迁移”
- java - 如何将 objectId 传输到 mongock 中的其他变更集?
- javascript - 修复 nextjs 中的“调用堆栈已满”错误
- javascript - 在活动时减小不同样式的字体大小
- javascript - 响应式菜单修复
- spring - 表包含多个逻辑列名引用的物理列名
- flutter - 通过 kafka mqtt-proxy 发送 Protobuf 消息
- go - golang如何自动将logrus错误写入supervisord stderr_logfile
- blockchain - 如何检查以太坊地址是否有效?