Solidity智能合约核心特性与知名标准解析
1. Solidity中的映射(Mappings)
映射(Mappings)在Solidity里是一种关联引用类型,类似其他语言中的哈希表或字典。它和数组一样是参数化的,能包含其他类型的元素。映射的特点是从键(keys)映射到值(values),键可以是任何值类型(包括字节或字符串),值则可以是任意类型(甚至其他映射)。不过,与数组不同的是,映射只能存储在存储区(storage),不能存于内存(memory)或调用数据(calldata)。
从底层来看,映射是哈希表,借助合约的大存储空间确保不同键不会冲突,从而保证对值的访问时间恒定。自动生成的公共映射获取器和数组的获取器类似,但它接收的是键而非索引。对于嵌套映射,获取器需为每个嵌套层级的键提供参数,且只返回最内层的值。
以下是一个包含简单映射和嵌套映射的示例合约:
contract PublicMappings {
mapping(uint256 => string)
public num2str;
mapping(uint256 => mapping(uint256 => string))
public num2num2str;
constructor() public {
num2str[10] = "foo";
num2num2str[10][20] = "bar";
}
}
需要注意的是,在Solidity里无法迭代映射中的键或值,若要跟踪插入映射的键,需单独用数组存储。
<
超级会员免费看
订阅专栏 解锁全文
1202

被折叠的 条评论
为什么被折叠?



