[英]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.