Skip to content

Latest commit

 

History

History
66 lines (51 loc) · 2.04 KB

映射.md

File metadata and controls

66 lines (51 loc) · 2.04 KB

映射

使用语法 mapping(keyType => valueType) 创建映射。

keyType 可以是任何内置值类型、字节数组、字符串或任何合约。

valueType 可以是任何类型,包括另一个映射或数组。

映射不可迭代。

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

contract Mapping {
    // 地址到整数的映射
    mapping(address => uint) public myMap;

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

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

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

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

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

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

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

代码术语解释:

映射是 Solidity 中一种数据结构,用于将一个类型的值映射到另一个类型的值。
keyType 可以是任何内置值类型、字节数组、字符串或任何合约,valueType 可以是任何类型,包括另一个映射或数组。
映射是非迭代的,不能像数组一样通过下标访问所有元素。
通过在映射中使用 delete 可以将值重置为默认值。默认值取决于 valueType 的类型,通常为 0 或 false。
嵌套映射是将映射嵌套在另一个映射中的方式。可以使用嵌套映射来实现多维映射。

https://solidity-by-example.org/mapping/