Solidity 将映射设置为空

ant*_*nis 7 ethereum solidity smartcontracts

我正在尝试使用 Solidity 0.4.4 创建智能合约。

我想知道是否有一种方法可以将已经输入的某些值的映射设置为空值?

例如:

这初始化了一个新的映射

mapping (uint => uint) map;

在这里我添加一些值

map[0] = 1;

map[1] = 2;

如何在不遍历所有键的情况下将地图设置回空?

我试过删除,但我的合同没有编译

Ban*_*eil 8

我相信还有另一种方法可以解决这个问题。

如果您使用第二个键定义映射,则可以增加该键以从本质上重置您的映射。

例如,如果您希望每年重置映射,您可以这样定义:

uint256 private _year = 2021;
mapping(uint256 => mapping(address => uint256)) private _yearlyBalances;
Run Code Online (Sandbox Code Playgroud)

添加和检索值的工作方式与正常情况一样,但需要一个额外的键:

_yearlyBalances[_year][0x9101910191019101919] = 1;
_yearlyBalances[_year][0x8101810181018101818] = 2;
Run Code Online (Sandbox Code Playgroud)

当需要重置一切时,您只需调用

_year += 1
Run Code Online (Sandbox Code Playgroud)


Ada*_*nis 6

不幸的是,你不能。有关原因的详细信息,请参阅Solidity 文档。您唯一的选择是遍历键。

如果您事先不知道您的密钥集,则必须将这些密钥保存在合同中的单独数组中。