Solidity 小白教程:7. 映射类型 mapping

Solidity 小白教程:7. 映射类型 mapping

这一讲,我们将介绍 solidity 中的哈希表:映射(Mapping)类型。

映射 Mapping

在映射中,人们可以通过键(Key )来查询对应的值(Value ),比如:通过一个人的id 来查询他的钱包地址。

声明映射的格式为mapping(_KeyType => _ValueType) ,其中**_KeyType _ValueType分别是 KeyValue**的变量类型。例子:

solidity 复制代码
mapping(uint => address) public idToAddress; // id映射到地址
    mapping(address => address) public swapPair; // 币对的映射,地址到地址

映射的规则

  • 规则 1 :映射的**_KeyType只能选择 solidity默认的类型,比如 uint**,address 等,不能用自定义的结构体。而**_ValueType可以使用自定义的类型。下面这个例子会报错,因为_KeyType**使用了我们自定义的结构体:
solidity 复制代码
// 我们定义一个结构体 Struct
    struct Student{
        uint256 id;
        uint256 score;
    }
     mapping(Student => uint) public testVar;
  • 规则 2 :映射的存储位置必须是storage ,因此可以用于合约的状态变量,函数中的storage 变量,和 library 函数的参数(见例子)。不能用于public 函数的参数或返回结果中,因为mapping记录的是一种关系 (key - value pair)。
  • 规则 3 :如果映射声明为public ,那么solidity 会自动给你创建一个getter 函数,可以通过Key 来查询对应的Value
  • 规则 4 :给映射新增的键值对的语法为**_Var[_Key] = _Value**,其中**_Var是映射变量名, _Key_Value**对应新增的键值对。例子:
solidity 复制代码
function writeMap (uint _Key, address _Value) public{
        idToAddress[_Key] = _Value;
    }

映射的原理

  • 原理 1 : 映射不储存任何键(Key)的资讯,也没有 length 的资讯。
  • 原理 2: 映射使用**keccak256(key)**当成 offset 存取 value。
  • 原理 3 : 因为 Ethereum 会定义所有未使用的空间为 0,所以未赋值(Value )的键(Key)初始值都是各个 type 的默认值,如 uint 的默认值是 0。

在 Remix 上验证 (以 Mapping.sol为例)

  • 映射示例 1 部署
  • 映射示例 2 初始值
  • 映射示例 3 key-value pair

总结

这一讲,我们介绍了solidity 中哈希表------映射(Mapping )的用法。至此,我们已经学习了所有常用变量种类,之后我们会学习控制流if-else,** while**等。

相关推荐
数智化精益手记局35 分钟前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程
带娃的IT创业者1 小时前
Bitwarden CLI 供应链攻击深度分析:当密码管理工具本身成为安全威胁
安全·npm·安全漏洞·cli·供应链攻击·bitwarden
程序员李程峰1 小时前
基础知识④链和代币之间的关系
web3·去中心化·区块链·智能合约·同态加密·共识算法·信任链
企业架构师老王1 小时前
2026制造业安全生产隐患识别AI方案:从主流产品对比看企业级AI Agent的非侵入式落地路径
人工智能·安全·ai
国冶机电安装1 小时前
化工厂生产线设备安装:从工艺安全到系统联动的完整解析
安全
可观测性用观测云3 小时前
通过观测云敏感数据扫描能力保障数据安全合规
安全
程序员李程峰3 小时前
基础知识⑤ERC-20、BEP-20 和TRC-20 这三种流行的加密代币标准
web3·去中心化·区块链·智能合约·同态加密·共识算法·信任链
m0_380167144 小时前
CoinGlass API 好用吗?(2026深度评估)
ai·区块链
2401_873479404 小时前
企业安全团队如何配合公安协查?IP查询在电子取证中的技术实践
tcp/ip·安全·网络安全·php
weixin_514253185 小时前
4-26联合训练 tmux
安全