Solidity中如何声明函数返回mapping(uint=>string[])对应的字符串数组?
Solidity中返回映射关联的字符串数组实现方法
假设我们在Solidity合约中定义了如下映射:
mapping(uint => string[]) public myStringMap;
1. 声明返回指定ID对应字符串数组的函数
你可以直接声明一个view类型的函数,接收uint类型的ID参数,返回string[] memory类型的数组。Solidity会自动将映射中存储的数组复制到内存中返回:
// 直接返回指定ID关联的字符串数组 function getStringArray(uint _id) public view returns (string[] memory) { return myStringMap[_id]; }
view修饰符确保函数仅读取链上数据,不修改状态- 返回值类型
string[] memory表示返回的是内存中的字符串数组,符合外部函数的返回要求(外部函数无法直接返回存储引用)
2. 在另一个函数中返回该字符串数组
你有两种方式实现:
方式一:直接访问映射返回
在另一个函数中可以直接读取映射并返回数组,逻辑和上面的函数一致:
function anotherGetter(uint _id) public view returns (string[] memory) { return myStringMap[_id]; }
方式二:调用已定义的getStringArray函数
如果已经有了返回数组的函数,也可以直接调用它来复用逻辑:
function reuseGetter(uint _id) public view returns (string[] memory) { return getStringArray(_id); }
注意事项
- 如果传入的
_id在映射中没有对应数据,函数会返回一个空的字符串数组 - 对于大型数组,复制到内存返回会消耗一定的Gas,需要根据实际场景优化
内容的提问来源于stack exchange,提问作者KOUROSH__STRANGER
相关产品推荐
相关产品推荐

