// 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]];
}
}