Arrays

不同類型的二維數組?

  • October 17, 2018

我有一個很有趣的問題。我創建了一個結構數組,在每個結構中,我都有一個地址數組。然後我得到了一個方法,當它在給定的結構上呼叫時

$$ index $$它將發送者地址添加到給定結構的地址數組中。 現在我的問題是,是否可以向地址數組的每個元素添加一個字元串?據我了解,您不能擁有兩種不同類型的二維數組?

struct Project{
           int id;
           string name;
            int votes;    
          address[] voters;

       }
   Project[] public projects;

   function vote(uint index , string comment) public {
          Project storage project = projects[index];
       Project.votes++       
          project.voters.push(msg.sender);
   // now to add a string (comment) to each address that is added to address array 
       }

我不得不擺弄以糾正一些小問題,然後想出了這個:

contract FunWithArrays {

 struct Project{
   int id;
   string name;
   int votes;    
   address[] voters;
   string[] comments;
 }

 Project[] public projects;

 function vote(uint index , string comment) public {
   Project storage project = projects[index];
   project.votes++;     
   project.voters.push(msg.sender);
   project.comments.push(comment); 
 }
}

這不是唯一的方法。您不能擁有具有多種類型的二維數組。你可以用結構來形成這樣的東西,你甚至可以有一個結構數組。因此,一個變體看起來像這樣:

contract FunWithArrays {

 struct Voter {
     address voter;
     string comment;
 }

 struct Project{
   int id;
   string name;
   int votes;    
   Voter[] voters;
 }

 Project[] public projects;

 function vote(uint index , string comment) public {
   Project storage project = projects[index];
   project.votes++;     
   Voter memory v;
   v.voter = msg.sender;
   v.comment = comment;
   project.voters.push(v);
 }
}

每當您使用此類結構時,您將不可避免地遇到一些組織問題。一定要查看一些常見的模式:Solidity 是否有很好解決且簡單的儲存模式?

希望能幫助到你。

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