Solidity
帶有名稱的 Solidity 組地址。例如:Whats 應用組
我想創建一個由組地址組成的小隊(組)。就像 Squad XYZ 由名稱為“A”的 Addr1、名稱為“B”的 Addr2、名稱為“C”的 Addr3 組成。
pragma solidity ^0.5.9; contract Squads{ struct squadMemberInfo{ string memberName; address memberAddress; } struct squadInfo{ string squadName; squadMemberInfo[] squadMembers; } squadInfo[] public SI; squadMemberInfo[] public SMI; //Function to create a Squad/Group and name that group function createSquad(address[] memory _addressesToBeGrouped,string memory _squadName) public returns(string memory isCreated){ //Yet to be coded } //Function to add Members to an existing Squad function addMember(string memory _squadName,address _memberAddress, string memory _memberName) public returns(bool isAdded){ squadMemberInfo memory squadMember = squadMemberInfo(_memberName,_memberAddress); SMI.push(squadMember); squadInfo memory squadInformation = squadInfo(_squadName,SMI); SI.push(squadInformation); return true; } }
我想將 make
squadMemberInfo[] public SMI;
作為函式內部的局部變數,addMember
以便函式可以返回squadMemberInfo[]
. 我可以直接使用這個返回數組並將struct squadInfo
.我也有點困惑我怎麼能做到這一點。:(
您應該查看映射。認為他們可以為您提供解決方案。我看到您的結構
squadInfo
已經具有squadMembers
數組,因此應該可以實現您正在尋找的分組地址的功能。如果要返回這些地址,可以設置一個 getter 函式來查找小隊並返回其成員,或者,您可以為每個小隊提供唯一 ID 並將小隊成員儲存在mapping(uint => address[]) squadMembers
. 至於為每個地址命名,您可以使用結構內部的映射,僅在該上下文中分配名稱,或者使用全域映射,以便名稱可以跨小隊轉移。此映射如下所示:
mapping(address => string) addressName
.要為映射設置值,只需使用
addressName[ADDRESS HERE] = "name";
.從本質上講,您正在做的很多事情都可以只使用數組來完成,但可能會增加太多的複雜性。你真的應該閱讀映射,因為我認為它們真的會幫助你!