Solidity
刪除映射中的映射
我有一個具有以下結構的映射:
mapping(uint256 => mapping(address => SOME_STRUCT)) public submissions;
delete submissions[uint256]
不允許(編譯器錯誤)。
delete submissions[uint256][msg.sender]
是允許的(沒有編譯器錯誤)。需要限制刪除功能,即只允許合約的經理從送出映射中刪除。但是內部映射中的地址作為鍵,是一個任意地址。我將如何刪除內部映射?
從官方文件:
delete a
將類型的初始值分配給a
,即對於整數,它等價於a = 0
,但它也可以用於數組,其中它分配長度為零的動態數組或相同長度的靜態數組,所有元素都設置為其初始值價值。delete a[x]
刪除數組索引x
處的項目,並保留所有其他元素和數組的長度不變。這尤其意味著它會在陣列中留下空隙。如果您打算刪除項目,映射可能是更好的選擇。對於結構,它分配一個所有成員都重置的結構。換句話說,
a
after的值delete a
與聲明 a 時沒有賦值相同,但需要注意以下幾點:
delete
對映射沒有影響(因為映射的鍵可能是任意的並且通常是未知的)。因此,如果您刪除一個結構,它將重置所有不是映射的成員,並且還會遞歸到成員中,除非它們是映射。但是,可以刪除單個鍵及其映射的內容:如果a
是映射,delete a[x]
則將刪除儲存在的值x
。要回答您的問題
How would i go about deleting the inner mapping?
:被授權刪除映射的實體應該儲存映射鍵,或者在請求啟動過程時接收它們作為輸入。