¿Cómo hago un bucle a través de un mapeo de dirección [duplicado]?

Tengo un mapeo de la lista de estructuras (mapeo (dirección => estructura [])) Tengo problemas para mostrarlos todos juntos en la interfaz (estoy usando React js).

Gracias.

Respuestas (3)

Una asignación es una tabla hash con todas las claves posibles asignadas a una instancia de un elemento.

A diferencia de las matrices, esto significa que no puede generar un error al hacer referencia a un elemento que no existe, porque todos existen. Si no se escribió nada en una ranura dada, devolverá una instancia cero ( false, 0, empty, 0x0).

Además, a diferencia de las matrices, no es posible iterar las claves o averiguar cuántas claves existen, porque todas existen.

Una ventaja importante de a mappinges su capacidad para acceder a un elemento mediante un identificador en una sola operación ( O(1)). Esto es muy importante para los contratos inteligentes.

mapping(address => struct) myMap; // id => struct

Entonces, las asignaciones son muy útiles, pero a veces también queremos poder iterar las claves o contarlas. Un patrón común es usar una matriz para contener la lista de asignaciones que existen.

Eche un vistazo a "Estructura asignada con índice" aquí: ¿Existen patrones de almacenamiento simples y bien resueltos para Solidity?

Espero eso ayude.

A mappingno es un array. No se puede iterar sobre él. Está destinado a O(1)operaciones. Fuente

Si está iterando o simplemente recuperando todos los archivos existentes conocidos structs, sugeriría lo siguiente.

1: Guarde el structsen unarray

2: Si desea asociaciones de pares de claves con address: use mapping(address => uint256)where uint256is the indexto structthe en array.

Nota: dado que no conozco todos sus requisitos, puede existir una mejor estrategia. Evalúe y analice exactamente cuáles son sus necesidades del contrato inteligente y proceda a partir de ahí. :)

Como Rob mencionó sobre el mapeo. Si desea mostrar todos los datos en el front-end, la mejor manera sería almacenar las direcciones en una matriz separada también. De esta forma, obtiene una lista de todas las direcciones almacenadas en el mapeo.

El segundo paso es obtener todas las direcciones de la matriz y usar el bucle for en la interfaz y recuperar los datos individuales uno por uno.