如需获取本内容的最新版本,请参见 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 尝试一下
END