Solidity
如何在 Solidity 中映射結構數組
需要這個架構
{ address1 => [struct1, struct2], address2 => [struct1, struct2, struct3,], address3 => [struct1, struct2, struct3, struct4, struct5], ... }
我的嘗試
contract Gallery{ uint public emojiCount; struct Token { uint token; string ipfsHash; } mapping (address => Token[]) public emoji; function addEmoji (uint _token, string _ipfsHash) public { emojiCount ++; emoji[msg.sender].push(Token(_token, _ipfsHash)); } }
我如何返回結構數組,以便我可以
IPFS
String
根據使用者帳戶地址保存圖像[msg.sender]
。這怎麼可能在solidity
中提前謝謝
您的程式碼應該按預期工作,並為您提供“表情符號”的總數,但您可能希望基於每個地址的資訊,為此您可以添加第二個映射,以始終保持插入地址的最後一個位置:
mapping (address => uint256) addressToLastUsedPosition;
然後當您對數組進行推送時,將位置取回,並設置映射。
uint256 newMaxPositionForAddress = emoji[msg.sender].push(Token(_token, _ipfsHash)); addressToLastUsedPostion[msg.sender] = newMaxPositionForAddress;
這樣做將始終讓您知道每個地址有多少個“表情符號”。