a mesma estrutura em array e mapeamentos

Oct 06 2020

Digamos que eu tenha um struct.

struct test {
  uint x;
}

test[] all;
mappings(uint => test) map;

function bla(){
   test memory structTest = test(5);
   all.push(structTest);
   map[10] = structTest;
}

Após o código, será structTestsalvo em um lugar e então meu array e map salvará as referências a ele ou será armazenado separadamente em map e array?

Se for o último, como posso criar struct e armazená-lo no mapeamento e array para não perder espaço?

Respostas

2 goodvibration Oct 06 2020 at 20:58

Uma cópia de structTesté salva separadamente na matriz e no mapeamento.

Para se livrar dessa redundância, você pode manter uma matriz de chaves em vez de valores:

uint[] all; // instead of `test[] all;`
mappings (uint => test) map;

function bla() {
    test memory structTest = test(5);
    all.push(10); // instead of `all.push(structTest);`
    map[10] = structTest;
}