代码之家  ›  专栏  ›  技术社区  ›  antonis

Solidity将映射设置为空

  •  7
  • antonis  · 技术社区  · 6 年前

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

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

    例如:

    这将初始化一个新的映射

    mapping (uint => uint) map;

    这里我添加了一些值

    map[0] = 1;

    map[1] = 2;

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

    我已尝试删除,但我的合同未编译

    2 回复  |  直到 3 年前
        1
  •  6
  •   Adam Kipnis Gabby    6 年前

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

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

        2
  •  6
  •   BananaNeil Linda Lawton - DaImTo    2 年前

    我相信还有另一种方法来处理这个问题。

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

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

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

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

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

    到了重置一切的时候,你只要打电话

    _year += 1