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