在 solidity 中,我有一个余额映射:
mapping(address => uint256) public balances;
我需要遍历此映射的每个地址(每个键)的每个条目。像这样的东西:
for (address i = -1; i < maxAddress ; i++) {
if (balances[i] > 0) {
uint256 dividendOwing = _totalDividends.mul(balances[i]).div(totalTokens);
_dividendBalances[i] = _dividendBalances[i].add(dividendOwing);
}
}
显然这是完全没有价值的,因为它会浪费 gas 迭代每个可能的地址到 maxAddress。但是我不知道有什么方法可以从上面的映射中像
address[]
这样的数组中累积地址。
在 python 中,它就像
address[] = balances.keys()
或类似的东西一样简单。
我也试过以下但发现它不是有效的坚固性:
function getAddresses() public view returns (address[] memory) {
uint256 length = 0;
for (address addr in balances) {
length++;
}
address[] memory result = new address[](length);
uint256 i = 0;
for (address addr in balances) {
result[i] = addr;
i++;
}
return result;
}
我如何遍历这个
balances
映射以在不强制地址空间的情况下获得他们各自的地址键?