23映射迭代

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

contract IterableMapping{
    mapping (address=>uint) public balance;
    mapping (address=>bool) public inserted;//记录某个地址是否存在于映射中
    address[] public keys;//记录存在的地址

    function set(address _key, uint _val) external {
        balance[_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 balance[keys[0]];
    }
    function last()external view returns (uint){
        return balance[keys[keys.length-1]];
    }
    function get(uint _i) external view returns (uint){
        return balance[keys[_i]];
    }
}