Arrays

刪除或清除映射

  • May 13, 2016

從我基於這個問題和這個問題收集的內容來看,我似乎最好不要嘗試清除數組或映射。正如有關映射的文件表明,每個可能的鍵在聲明時都被初始化並映射到零值。

我從第一個 Q 中接受了 Nick Johnson 的建議,我保留了一個數組計數,我用它來遍歷數組(和映射)來代替刪除數組。我的問題是通過清除與儲存數據的鍵關聯的值是否可以獲得任何好處。

一種映射是從地址到結構列表,另一種是從地址到結構。我是否正確地認為儲存數據的氣體成本是在設置時花費的,因此嘗試通過清除結構數據來釋放空間沒有額外的價值?

刪除儲存中的一個值(一個單詞 - 一個結構可能代表多個單詞)會向呼叫者返還 15,000 個 gas。只要您要清除的元素數量是有限的(例如,它對任何單個呼叫都有最大值),通過刪除不需要的數據來降低執行成本絕對值得。例外情況是:

  • 您需要釋放無限數量的元素,在這種情況下,您可能會在清理儲存時耗盡氣體。
  • 您稍後可能會將相同的元素重置為新值,在這種情況下,不觸摸它比清除並稍後重新初始化它更省氣。

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