我需要删除Everscale实体映射中包含struct的一个项
struct Example {
string data;
uint64 validFrom;
uint64 valiUntil;
}
mapping(uint64 => Example) example;example[1668161798] = Example("Start", 1668161798, 1668162798);
...
example[1668163798] = Example("Middle", 1668163798, 1668164798); // <-- Need to delete this one
...
example[1668165798] = Example("End", 1668165798, 1668166798);问题1
从以下方面看,做这件事的最佳方式是什么:
它是使用delete指令工作从示例,还是更好地重建和重新分配映射?
delete example[1668163798];问题2
使用delete后,映射的项中包含的数据会发生什么变化?是否有垃圾收集器将垃圾清除掉以减少存储量?
如果删除后重新分配同一索引上的新数据,会发生什么情况?
发布于 2022-11-11 13:58:13
删除example1668163798;
是正确的方法。“删除”为应用到的变量指定类型的默认值。对于映射键,它从字典中移除对,从而释放存储空间。
将一个新值分配给先前删除的键与将任何其他(键,值)对添加到字典中没有什么不同;它工作得很好。
https://stackoverflow.com/questions/74401242
复制相似问题