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
我正在尝试使用 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