Cómo mapear Array of Structs en Solidity [duplicado]

Necesito esta arquitectura

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

Mi intento

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

¿Cómo devuelvo la matriz Struct para poder guardar imágenes IPFS Stringde acuerdo con la dirección de la cuenta de usuario [msg.sender]?

Como es esto posible en solidez
Gracias de antemano

Respuestas (1)

su código debería funcionar según lo previsto y brindarle un recuento total de 'emojis', pero es posible que desee esa información por dirección, para hacerlo, podría agregar una segunda asignación, para mantener siempre la última posición para la dirección insertada :

mapping (address => uint256) addressToLastUsedPosition;

luego, cuando presiona la matriz, recupera la posición y establece la asignación.

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

hacerlo siempre te permitirá saber cuántos 'emoji' hay por dirección.

Gracias me sirve. Creo que la solución que explica con solidityel código es mucho más fácil de entender, donde las preguntas similares a las mencionadas anteriormente no se explican por sí mismas @shaddow
@shaddow en lugar de agregar un nuevo mapeo, ¿podemos simplemente usar retrun emoji[msg.sender].length