21-Solidity8.0-映射迭代

324 阅读1分钟

image.png 源码:

pragma solidity ^0.8.7;


contract Mapping{
    mapping(address => uint) public balances;
    mapping(address => bool) public inserted;
    address[] public keys;

    function set(address _key, uint _val) external {
        balances[_key] = _val;
        
        if (!inserted[_key]) {
           inserted[_key] = true;
           keys.push(_key);
        }
    }

    function getSize() external view returns (uint) {
        return keys.length;
    }

    function first() external view returns (uint) {
        return balances[keys[0]];
    }

    function last() external view returns (uint) {
        return balances[keys[keys.length - 1]];
    }

    function get(uint _i) external view returns (uint){
        return balances[keys[_i]];
    }
}