本文我们介绍Solidity语言中的映射,包括映射的基本定义、语法、映射的变量声明和基本读写操作。并且通过两个智能合约例子演示了映射的定义与基本操作。
基本概念
Solidity中关于映射的一些定义:
- 映射以键-值对(key => value)的形式存储数据;
- 键可以是任何内置数据类型,包括字节和字符串类型,但不允许引用类型,如数组、结构体和映射;
- 值可以是任何数据类型,包括另一个映射或数组;
- 映射是不可迭代的,即无法通过遍历映射来枚举所有的键;
- 映射通常用于将唯一的以太坊地址与值类型关联起来。
声明语法
映射的定义语法如下:
mapping(key => value) <access specifier> <name>;
例如:
mapping(address => uint) public balances;
以上代码声明了一个从 address
类型到 uint
类型的映射,可见性权限是 public
,名称为 balances
。
合约例子
例子1
演示映射的定义,基本的数据添加和读取操作。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
// 映射
contract Mapping {
// address => uint
mapping(address => uint) public map;
// 取值
function get(address _addr) public view returns(uint) {
// 如果值未设置,则返回默认值
return map[_addr];
}
// 设置
function set(address _addr, uint i) public {
map[_addr] = i;
}
// 删除
function remove(address _addr) public {
// 删除不改变数据长度
delete map[_addr];
}
}
输出:我们在Remix中编译、部署和运行上面的合约例子,执行结果如下图:
例子2
一个嵌套映射的例子,映射的值为另一个映射。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
// 嵌套映射
contract MappingNested {
// address => mapping
mapping(address => mapping(uint => bool)) public map;
// 取值
function get(address _addr, uint _i) public view returns(bool) {
// 如果值未设置,则返回默认值
return map[_addr][_i];
}
// 设置
function set(address _addr, uint _i, bool _boo) public {
map[_addr][_i] = _boo;
}
// 删除
function remove(address _addr, uint _i) public {
// 删除不改变数据长度
delete map[_addr][_i];
}
}
输出:我们在Remix中编译、部署和运行上面的合约例子,执行结果如下图:文章来源:https://www.toymoban.com/news/detail-744562.html
文章来源地址https://www.toymoban.com/news/detail-744562.html
到了这里,关于以太坊智能合约开发:Solidity语言中的映射的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!