我有这样的东西: mapping (address => mapping(string => uint)) m_Map;
它可以作为 m_Map[strCampaignName][addrRecipient] 访问,活动可以有多个收件人...
现在在某个时候(ICO 失败),我需要删除所有收件人的活动。我不认为简单的删除 m_Map[strCampaignName] 会起作用。如果我使用 m_Map[strCampaignName] = null,我认为数据不会被删除...如果我遍历所有收件人的列表,我将耗尽 gas...
这种情况应该如何处理?Min:我希望 m_Map[strCampaignName] 为空,Max:我不想在上面浪费内存。
先感谢您。
正如您所说,您无法mapping在 Solidity 中删除 a 。“清除”数据的唯一方法是迭代键(使用存储键的单独数组)并删除各个元素。但是,您对成本的担忧是正确的......根据映射的大小,您可能会遇到气体消耗问题。
解决此问题的常见方法是struct在映射中使用软删除:
struct DataStruct {
mapping(string => uint) _data;
bool _isDeleted;
}
mapping(address => DataStruct) m_Map;
Run Code Online (Sandbox Code Playgroud)
现在,删除条目只需要您设置标志:m_Map[someAddr]._isDeleted = true;
| 归档时间: |
|
| 查看次数: |
6068 次 |
| 最近记录: |