Solidity,遍历`mapping(address => unit256)`

问题描述 投票:0回答:0

在 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
映射以在不强制地址空间的情况下获得他们各自的地址键?

for-loop mapping solidity
© www.soinside.com 2019 - 2024. All rights reserved.