Arrays
將結構實例添加到結構對象的動態數組中
考慮這段程式碼。
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 種類型的數組:
- 內部函式,記憶體中的靜態數組,例如,
type[3] memory arr;
- 內部函式,記憶體中的動態數組,例如,
type[] memory arr = new type[](3);
- 外部函式,儲存中的靜態數組,例如,
type[3] public arr;
- 外部函式,儲存中的動態數組,例如,
type[] public arr;
您可以
push
/pop
僅來自/來自儲存中的動態數組。