我正在尝试使用Solidity 0.4.4创建智能合约。
我想知道是否有办法设置一个已经输入空值的映射?
例如:
这会启动一个新的mappping
mapping (uint => uint) map;
这里我添加了一些值
map[0] = 1;
map[1] = 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