我使用的版本是0.5.2
我在Remix IDE中执行以下代码
pragma solidity ^ 0.5.2;
合同彩票{ 致公共经理; 地址应付[]公共参与者;
…
可能最好/最容易做的事情就是 players.length = 0 。
players.length = 0
请注意,这将使用与阵列中元素数量成比例的气体(因为它会删除所有元素)。如果这是一个问题,您可能需要考虑使用映射而不是单独存储的长度。例如。
mapping(uint256 => address payable) players; uint256 playersLength;
然后就做 playersLength = 0 重置。”
playersLength = 0
的 编辑 强>
根据评论,听起来你没有看到基于阵列大小的燃气使用情况。这是在Remix中测试的简单方法:
pragma solidity 0.5.2; contract Test { uint256[] foo; uint256[] bar; constructor() public { for (uint256 i = 0; i < 5; i++) { foo.push(i); } for (uint256 i = 0; i < 100; i++) { bar.push(i); } } function deleteFoo() external { foo.length = 0; } function deleteBar() external { bar.length = 0; } }
在我的测试中,使用JavaScript VM, deleteFoo 消耗26,070气体,和 deleteBar 消耗266,267气体。
deleteFoo
deleteBar