Solidity将映射设置为空

时间:2017-12-31 21:31:42

标签: ethereum solidity smartcontracts

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

我想知道是否有办法设置一个已经输入空值的映射?

例如:

这会启动一个新的mappping

mapping (uint => uint) map;

这里我添加了一些值

map[0] = 1;

map[1] = 2;

如何在不迭代所有键的情况下将地图设置为空?

我已尝试删除我的合同无法编译

2 个答案:

答案 0 :(得分:2)

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

如果您未提前知道自己的一组密钥,则必须将密钥保存在合同中的单独数组中。

答案 1 :(得分:1)

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

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

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

uint256 private _year = 2021;
mapping(uint256 => mapping(uint256 => uint256)) private map;

添加和检索值与正常工作一样,只是多了一个键:

_yearlyBalances[_year][0x9101910191019101919] = 1;
_yearlyBalances[_year][0x8101810181018101818] = 2;

当需要重置一切时,您只需致电

_year += 1