Solidity
刪除與數組映射的特定值 - 合約
我寫了一份包含一對多關係元素的契約。每個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; } } }