Arrays

將結構實例添加到結構對象的動態數組中

  • December 21, 2020

考慮這段程式碼。

function getDoctorsList(uint[] memory _docIds) public view returns (doctor[] memory) {
   doctor[] memory _doctors;
   for(uint i = 0; i < _docIds.length; i++) {
       _doctors[i] = doctors[_docIds[i]];
   }
   return _doctors;
}

在這裡,我使用映射的 id 數組並將適當的結構實例儲存到結構實例的動態數組中。但我無法執行此功能。它是說:

呼叫 DogChain.getDoctorsList 出錯:VM 錯誤:操作碼無效。無效的操作碼 執行可能已經拋出。調試事務以獲取更多資訊。

以前,我嘗試推送每個項目。但是編譯器說,這是不可能的。誰能幫我這個?

您需要將動態數組初始化為所需的長度:

doctor[] memory _doctors = new doctor[](_docIds.length);

更一般地說,有 4 種類型的數組:

  1. 內部函式,記憶體中的靜態數組,例如,type[3] memory arr;
  2. 內部函式,記憶體中的動態數組,例如,type[] memory arr = new type[](3);
  3. 外部函式,儲存中的靜態數組,例如,type[3] public arr;
  4. 外部函式,儲存中的動態數組,例如,type[] public arr;

您可以push/pop僅來自/來自儲存中的動態數組。

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