3分钟Solidity: 3.1 Mapping映射

35 阅读1分钟

如需获取本内容的最新版本,请参见 Cyfrin.io 上的“Mapping(代码示例)”

映射是通过语法 mapping(keyType => valueType) 创建的。 keyType 可以是任何内置值类型、bytes、string 或任何合约。 valueType 可以是任何类型,包括另一个映射或数组。 映射是不可迭代的。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

contract Mapping {
    // 从地址映射到无符号整数
    mapping(address => uint256) public myMap;

    function get(address _addr) public view returns (uint256) {
        // 映射始终返回一个值。
        // 如果从未设置该值,将返回默认值。
        return myMap[_addr];
    }

    function set(address _addr, uint256 _i) public {
        // 更新此地址处的值
        myMap[_addr] = _i;
    }

    function remove(address _addr) public {
        // 将值重置为默认值。
        delete myMap[_addr];
    }
}

contract NestedMapping {
    // 嵌套映射(从地址到另一个映射的映射)
    mapping(address => mapping(uint256 => bool)) public nested;

    function get(address _addr1, uint256 _i) public view returns (bool) {
        // 你可以从嵌套映射中获取值
        // 即使未初始化
        return nested[_addr1][_i];
    }

    function set(address _addr1, uint256 _i, bool _boo) public {
        nested[_addr1][_i] = _boo;
    }

    function remove(address _addr1, uint256 _i) public {
        delete nested[_addr1][_i];
    }
}

Remix Lite 尝试一下

solidity-mapping.png

END