Solidity

刪除與數組映射的特定值 - 合約

  • February 19, 2018

我寫了一份包含一對多關係元素的契約。每個id包含不同的名稱(例如:id = 1 包含名稱 a、b 和 c)。我需要從 id = 1 中刪除名稱“a”。

struct IdStruct{
   bytes12[] structArray; 
}

mapping(string => IdStruct) idStructs;

function appendNames(string id, bytes12 name) payable returns (bool success){ 
idStructs[id].structArray.push(name); 
} 

function getName(string id) returns(bytes12[]){ 
 return idStructs[id].structArray; 
}

我嘗試過delete idStructs[id].structArray[name]; ,但沒有刪除任何內容,當我嘗試時delete idStructs[id].structArray;,它會刪除 id=1 下的所有名稱。

我猜你的電話delete idStructs[id].structArray。這意味著它將刪除數組中的所有元素。如果要刪除特定元素,則需要遍歷該數組中的所有元素。如果元素匹配,那麼您需要刪除該元素。

找到下面的範常式式碼:

function deleteElement(string id, bytes12 name){
   for(uint index=0;index<idStructs[id].structArray.length;index++){
       if(idStructs[id].structArray[index]==name){
           delete idStructs[id].structArray[index];
           break;
       }
   }
}

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