Наверное, лучшее / простое, что нужно сделать, это players.length = 0
.
Обратите внимание, что при этом будет использоваться газ, пропорциональный количеству элементов в массиве (поскольку он удаляет все из них). Если это проблема, вы можете рассмотреть возможность использования сопоставления с отдельно сохраненной длиной. Э.Г.
mapping(uint256 => address payable) players;
uint256 playersLength;
Тогда просто сделайте playersLength = 0
для «сброса».
EDIT
По комментариям звучит так, будто вы не видите использования газа в зависимости от размера массива. Вот простой способ тестирования в 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 deleteFoo
потребляет 26 070 газов, а deleteBar
потребляет 266 267 газов.