Arrays
不同類型的二維數組?
我有一個很有趣的問題。我創建了一個結構數組,在每個結構中,我都有一個地址數組。然後我得到了一個方法,當它在給定的結構上呼叫時
$$ 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 是否有很好解決且簡單的儲存模式?
希望能幫助到你。