首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在映射过程中删除元素

在映射过程中删除元素
EN

Stack Overflow用户
提问于 2022-11-11 10:36:44
回答 1查看 19关注 0票数 0

我需要删除Everscale实体映射中包含struct的一个项

代码语言:javascript
复制
struct Example {
    string data;
    uint64 validFrom;
    uint64 valiUntil;
}

mapping(uint64 => Example) example;
代码语言:javascript
复制
example[1668161798] = Example("Start", 1668161798, 1668162798);
...
example[1668163798] = Example("Middle", 1668163798, 1668164798);  //  <-- Need to delete this one
...
example[1668165798] = Example("End", 1668165798, 1668166798);

问题1

从以下方面看,做这件事的最佳方式是什么:

  1. 汽油消耗?
  2. 储藏室?

它是使用delete指令工作从示例,还是更好地重建和重新分配映射?

代码语言:javascript
复制
delete example[1668163798];

问题2

使用delete后,映射的项中包含的数据会发生什么变化?是否有垃圾收集器将垃圾清除掉以减少存储量?

如果删除后重新分配同一索引上的新数据,会发生什么情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-11 13:58:13

删除example1668163798;

是正确的方法。“删除”为应用到的变量指定类型的默认值。对于映射键,它从字典中移除对,从而释放存储空间。

将一个新值分配给先前删除的键与将任何其他(键,值)对添加到字典中没有什么不同;它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74401242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档