Solidity
添加具有映射的成員時為空數組
我有一個問題。我有一個映射到結構的映射。
contract A{ struct struct1{ //...members... } struct struct2{ struct1 input1; } mapping (uint => struct1) mapToStruct; struct2[] allEntries; //...rest of the code for populating mapToStruct } contract B is A{ function addToStruct2(uint _mappingNumber) returns(bool status){ struct2 memory newMember; struct1 memory newEntry; newEntry = mapToStruct[_mappingNumber]; newMember.input1 = newEntry; allEntries.push(newMember); return true; } }
但是這段程式碼不起作用,我無法將詳細資訊添加到
allEntries
. 該數組有一個新條目,但它的所有成員都是0
,即使在addToStruct2
返回 true 之後也是如此。提前致謝
當我第一次開始調試時,我很糾結。嵌套結構似乎不必要地忙碌。我傾向於一個很好解決的模式。看看這裡的一些基本模式:Solidity 是否有很好解決且簡單的儲存模式?
我認為您可以使用“使用結構映射”、“具有唯一 ID 的結構數組”甚至“使用結構和刪除進行映射”——在很多情況下都是一種瑞士軍刀模式。
希望能幫助到你。
更新
這將讓您發送一個密鑰和兩個輸入並儲存數據。您可以獲取密鑰計數並按數字獲取密鑰。您可以使用有效的密鑰獲取儲存的輸入。當您獲取未知密鑰時,
isSet
將是錯誤的。contract Simple { struct MyStruct { uint input1; uint input2; bool isSet; } mapping(bytes32 => MyStruct) public myStructs; bytes32[] public keys; function addToData(bytes32 key, uint input1, uint input2) public returns(bool success) { myStructs[key].input1 = input1; myStructs[key].input2 = input2; myStructs[key].isSet = true; keys.push(key); return true; } function getKeyCount() public constant returns(uint keyCount) { return keys.length; } }