簡體   English   中英

返回嵌套數組solidity

[英]return nested array solidity

是否可以在solidity中返回一個數組?

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

contract Test {
    constructor() {}
    function multiArray() external pure returns (uint256[2][] memory doubleArray) {
        doubleArray[0] = [uint(12345678),uint(1234567)];
      return doubleArray;
    }
}

這不起作用,但我認為solidity > 0.8.0應該是可能的,也可以使用“ABIEncoderV2”?

Solidity 僅支持一維數組。 多維 arrays 尚未到來。

// SPDX-License-Identifier: GPL-3.0;
pragma  solidity >=0.7.0 <0.9.0;
contract Test{
    string[] A=["A","B"];
    function fun() public view  returns(string[] memory){
        return A;
}
}

在此處輸入圖像描述

嵌套的 arrays 仍然不完整,但它們在一定程度上工作。 目前,嵌套 arrays 只能在對私有或內部函數的內部調用中使用。 它們也應該存儲在存儲或 memory 中。

最大的問題是在 calldata 中將它們用作尚不支持的參數或返回語句。

我建議嘗試找到另一種方法來返回嵌套數組信息,如映射、結構,甚至返回多個列表,然后在 function 中使用它們。

另一種選擇是將數據作為字節傳遞並提取數組數據,反之亦然 但是,對於大型 arrays 和其他一些問題,這可能會產生高 gas 成本。 要使用此方法,您可以利用新的 ABI 編碼器。

嘗試先初始化數組,然后按索引返回值。 您也可以使用映射,但請記住,您不能輕松地對其進行迭代。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract NestedArrays{
    
    mapping(uint256 => uint256[]) mappingArray;
    uint256[2][] multiArray;

    constructor(){
        multiArray.push([1,2]);
        multiArray.push([3,4]);

        mappingArray[0] = [10,20];
        mappingArray[1] = [30,40];
    }

    function getMultiArray() public view returns(uint256[2][] memory){
        return multiArray;
    }

    function getMultiArrayMember(uint256 index) public view returns(uint256[2] memory){
        require(multiArray.length > index, "wrong index");
        return multiArray[index];
    }

    function getMappingArrayMember(uint256 index) public view returns(uint256[] memory){
        return mappingArray[index];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM