Solidity0.8.0-映射迭代

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.7;

contract IterableMapping {
    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]) {//判断key是否已插入映射中
            inserted[_key] = true;
            keys.push(_key);
        }
    }

    function getSize() external view returns (uint) {//获取所有地址的长度
        return keys.length;
    }

    function first() external view returns (uint) {//返回数组第一个地址的余额
        return balances[key[0]];
    }

    function last() external view returns (uint) {//返回数组最后一个余额
        return balances[keys[keys.length - 1]];
    }

    function get(uint _i) external view returns (uint) {//返回任意一个索引的余额
        return balances[key[_i]];
    }
}

 

posted @ 2022-07-29 12:27  ZaleSwfit  阅读(47)  评论(0编辑  收藏  举报