So ordnen Sie Array of Structs in Solidity zu [Duplikat]

Brauchen Sie diese Architektur

    {
      address1 => [struct1, struct2],
      address2 => [struct1, struct2, struct3,],
      address3 => [struct1, struct2, struct3, struct4, struct5],
      ...
    }

Mein Versuch

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));
 }
}

Wie gebe ich ein Struct-Array zurück, damit ich Bilder IPFS Stringgemäß der Benutzerkontoadresse speichern kann [msg.sender].

Wie ist dies in Solidität möglich
Vielen Dank im Voraus

Antworten (1)

Ihr Code sollte wie beabsichtigt funktionieren und Ihnen eine Gesamtzahl von "Emojis" geben, aber Sie möchten diese Informationen möglicherweise pro Adresse, um dies zu tun, könnten Sie eine zweite Zuordnung hinzufügen, um immer die letzte Position für die eingefügte Adresse zu halten :

mapping (address => uint256) addressToLastUsedPosition;

Wenn Sie dann auf das Array drücken, die Position zurückerhalten und die Zuordnung festlegen.

uint256 newMaxPositionForAddress = emoji[msg.sender].push(Token(_token, _ipfsHash));
addressToLastUsedPostion[msg.sender] = newMaxPositionForAddress;

Auf diese Weise können Sie immer wissen, wie viele "Emojis" pro Adresse vorhanden sind.

Danke, es ist Arbeit für mich. Ich denke, die Lösung, die Sie mit solidityCode erklären, ist viel einfacher zu verstehen, wobei ähnliche Fragen wie oben erwähnt nicht selbsterklärend sind @shaddow
@shaddow Anstatt eine neue Zuordnung hinzuzufügen, können wir einfach rerun emoji[msg.sender].length verwenden