// Source: https://ethereum.stackexchange.com/questions/13167/are-there-well-solved-and-simple-storage-patterns-for-solidity pragma solidity ^0.4.24; contract Test { uint idIndex = 1; struct Ev { uint id; uint indexInArray; string name; } mapping(uint => Ev) public eventsMap; uint[] public eventsMapKeys; function getKeys() public view returns(uint[]) { return eventsMapKeys; } function addEvent(string name) public { eventsMap[idIndex] = Ev({ id: idIndex, indexInArray: eventsMapKeys.push(idIndex) - 1, name: name }); idIndex++; } function removeEvent(uint id) public{ uint i = eventsMap[id].indexInArray; while (i < eventsMapKeys.length-1) { eventsMapKeys[i] = eventsMapKeys[i+1]; eventsMap[eventsMapKeys[i+1]].indexInArray = i; i++; } eventsMapKeys.length--; delete eventsMap[id]; } }
0.4.24