Solidity

如何在 Solidity 中映射結構數組

  • September 13, 2018

需要這個架構

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

這樣做將始終讓您知道每個地址有多少個“表情符號”。

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