Solidity

刪除映射中的映射

  • April 13, 2020

我有一個具有以下結構的映射:

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處的項目,並保留所有其他元素和數組的長度不變。這尤其意味著它會在陣列中留下空隙。如果您打算刪除項目,映射可能是更好的選擇。

對於結構,它分配一個所有成員都重置的結構。換句話說,aafter的值delete a與聲明 a 時沒有賦值相同,但需要注意以下幾點:

delete對映射沒有影響(因為映射的鍵可能是任意的並且通常是未知的)。因此,如果您刪除一個結構,它將重置所有不是映射的成員,並且還會遞歸到成員中,除非它們是映射。但是,可以刪除單個鍵及其映射的內容:如果a是映射,delete a[x]則將刪除儲存在的值x


要回答您的問題How would i go about deleting the inner mapping?

被授權刪除映射的實體應該儲存映射鍵,或者在請求啟動過程時接收它們作為輸入。

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