Solidity

添加具有映射的成員時為空數組

  • March 28, 2017

我有一個問題。我有一個映射到結構的映射。

 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;
 }

}

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