Solidity 练习:可迭代映射

2022-12-29 Web3 Solidity

# 一、题目说明

映射在 Solidity 中是不可迭代的。

# 二、任务列表

  1. 编写一个函数 first(),返回第一个被插入地址的余额。可以假设 keys 数组不空。
  2. 编写一个函数 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

# 四、参考资料

Last Updated: 2023-01-28 4:31:25