Solidity

如何將數組的所有項複製到不同大小的動態數組中?

  • January 8, 2022

當我嘗試將數組儲存在另一個數組中時遇到問題。執行時出現錯誤storetransact to MyContract.store errored: VM error: revert.

我需要第二個數組,因為在下一步中我想向它推送更多值(_arr.push())。但是我在編譯期間已經收到錯誤(TypeError: Member "push" is not available in address[] memory outside of storage.)。

因此,我_arr直接使用長度創建:uint256[] memory _arr = new uint256[](myVal.length+1);然後將新值直接儲存到最後一個位置(_arr[_arr.length-1] = 42;)(我在下面的範例中省略了它,因為沒有這條線它已經無法工作!)。

有誰知道我目前缺少什麼,或者是否有替代方法?

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.9.0;

contract MyContract {
   uint256[] myVal;
   uint256[] _arr;

   function store(uint256 _myVal) public {
       myVal.push(_myVal);
       for(uint256 _y = 0; _y < myVal.length; _y++){
           _arr[_y] = myVal[_y];
       }
   }
   function retrieve() public view returns (uint256[] memory) {
       return _arr;
   }
}

已經提前感謝了:)

我不太了解這個想法的深度,但也許這個選項會有所幫助:

   function store(uint256 _myVal) public {
       myVal.push(_myVal);
        
       for(uint256 _y = 0; _y < myVal.length; _y++) 
           if(_y<_arr.length)
               _arr[_y]=myVal[_y];
           else
               _arr.push(myVal[_y]);
   }

引用自:https://ethereum.stackexchange.com/questions/118241