Solidity 练习:可迭代映射
睡不醒的鲤鱼 2022-12-29 Web3 Solidity
# 一、题目说明
映射在 Solidity 中是不可迭代的。
# 二、任务列表
- 编写一个函数 first(),返回第一个被插入地址的余额。可以假设 keys 数组不空。
- 编写一个函数 last(),返回最后一个被插入地址的余额。可以假设 keys 数组不空。
# 三、解答代码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract IterableMapping {
mapping(address => uint) public balances;
mapping(address => bool) public inserted;
address[] public keys;
function set(address _addr, uint _bal) external {
balances[_addr] = _bal;
if (!inserted[_addr]) {
inserted[_addr] = true;
keys.push(_addr);
}
}
function get(uint _index) external view returns (uint) {
address key = keys[_index];
return balances[key];
}
function first() external view returns (uint) {
address key = keys[0];
return balances[key];
}
function last() external view returns (uint) {
address key = keys[keys.length - 1];
return balances[key];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32