Solidity 将映射设置为空

Solidity setting a mapping to empty

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

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

例如:

这会初始化一个新的映射

mapping (uint => uint) map;

这里我加了一些值

map[0] = 1;

map[1] = 2;

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

我试过删除但我的合约无法编译

很遗憾,你不能。有关原因的详细信息,请参阅 Solidity documentation。您唯一的选择是遍历键。

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

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

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

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

uint256 private _year = 2021;
mapping(uint256 => mapping(address => uint256)) private _yearlyBalances;

添加和检索值与正常情况一样,但有一个额外的键:

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

当需要重置所有内容时,您只需调用

_year += 1