【问题标题】:Solidity setting a mapping to emptySolidity 将映射设置为空
【发布时间】:2023-03-28 07:53:01
【问题描述】:

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

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

例如:

这会启动一个新的映射

mapping (uint => uint) map;

我在这里添加一些值

map[0] = 1;

map[1] = 2;

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

我已尝试删除,但我的合约无法编译

【问题讨论】:

    标签: ethereum solidity smartcontracts


    【解决方案1】:

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

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

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

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

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

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

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

    _year += 1
    

    【讨论】:

      【解决方案2】:

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

      如果您不提前知道自己的密钥集,则必须将密钥保存在合约内的单独数组中。

      【讨论】:

        猜你喜欢
        • 2019-01-05
        • 2019-02-26
        • 2018-07-08
        • 2013-09-19
        • 2018-07-31
        • 2021-04-28
        • 2019-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多