首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在函数中创建2D-Array string[][]

不能在函数中创建2D-Array string[][]
EN

Ethereum用户
提问于 2022-10-24 17:27:58
回答 2查看 36关注 0票数 0

我正在尝试创建一个2D字符串数组来序列化我的结构,即:

代码语言:javascript
复制
struct Submission {
    uint256 id;
    address creator;
    string title;
    string IPFS_CID;
    uint16 likeCount;
    uint16 dislikeCount;
    mapping(address => uint256) likes;
    mapping(address => uint256) dislikes;
}

随着…的进口

代码语言:javascript
复制
import "@openzeppelin/contracts/utils/Strings.sol";

我想这么做:

代码语言:javascript
复制
function getLastNSubmissions(uint128 n) public view returns (string[][] memory) {
    require((n-1) > 0, "Cannot get more submissions than available.");

    string[][6] memory returnSubmissions;
    uint start = submissionId - n;
    uint pos = 0;

    for (uint i=start; i < submissionId; i+=1) {
        Submission storage s = submissions[i];

        returnSubmissions[pos] = [
            Strings.toString(s.id), 
            abi.encodePacked(s.creator), 
            s.title, 
            s.IPFS_CID, 
            Strings.toString(s.likeCount), 
            Strings.toString(s.dislikeCount)
        ];
    }
}

returnSubmissions[Strings.toString(pos)] = new string[Strings.toString(s.id), ...]

我得到了以下错误:

代码语言:javascript
复制
Expected ']' but got ','

有人能帮我修一下这段代码吗?谢谢。

EN

回答 2

Ethereum用户

回答已采纳

发布于 2022-10-27 20:19:22

对于那些在白天遇到同样的问题的人来说:这就是我的功能是如何工作的:

代码语言:javascript
复制
/*
* Will return the last n submissions in serialized form: [n...][id, creator, title, CID, likeCount, dislikeCount]
*/
function getLastNSubmissions(uint256 n) public view returns (string[6][] memory) {
    require(submissionId > 0, "There are no submissions yet.");

    string[6][] memory returnSubmissions = new string[6][](n);

    uint start = submissionId - n;
    uint pos = 0;

    for (uint i=start; i < submissionId; i+=1) {
        Submission storage s = submissions[i];

        returnSubmissions[pos][0] = Strings.toString(s.id);
        returnSubmissions[pos][1] = Strings.toHexString(uint160(s.creator), 20);
        returnSubmissions[pos][2] = s.title;
        returnSubmissions[pos][3] = s.IPFS_CID;
        returnSubmissions[pos][4] = Strings.toString(s.likeCount);
        returnSubmissions[pos][5] = Strings.toString(s.dislikeCount);

        pos += 1;
    }
    return returnSubmissions;
}
票数 1
EN

Ethereum用户

发布于 2022-10-24 17:42:39

看起来您需要定义至少一个数组的长度。

见此:

定义二维数组时,与其他编程语言相比,多维数组的表示法只有在定义时才会反转。

对于本例,我们将比较两个数组:

字符串2 crypto_names;

字符串undefined names_A_to_F;

在第一个示例crypto_names中,我们完全有一个动态数组,但是它的元素是固定大小的数组(2)。在第二种情况下,names_A_to_F是一个固定大小的数组,其中包含6个元素,每个元素都是“来自链接的”动态数组。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/138091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档