Wie durchlaufe ich eine Adresszuordnung

Ich habe eine Zuordnung der Strukturliste (Zuordnung (Adresse => Struct [])). Ich habe Probleme, alle zusammen im Frontend anzuzeigen (ich verwende React js).

Danke.

Antworten (3)

Eine Zuordnung ist eine Hash-Tabelle, in der jeder mögliche Schlüssel einer Instanz eines Elements zugeordnet ist.

Im Gegensatz zu Arrays bedeutet dies, dass Sie keinen Fehler generieren können, indem Sie auf ein nicht vorhandenes Element verweisen, da sie alle vorhanden sind. Wenn nichts in einen bestimmten Slot geschrieben wurde, wird eine nullartige Instanz ( false, 0, empty, 0x0) zurückgegeben.

Außerdem ist es im Gegensatz zu Arrays nicht möglich, die Schlüssel zu iterieren oder herauszufinden, wie viele Schlüssel vorhanden sind, da sie alle vorhanden sind.

Ein wichtiger Vorteil von a mappingist die Möglichkeit, mit einem Bezeichner in einer Operation ( ) auf ein Element zuzugreifen O(1). Dies ist sehr wichtig für Smart Contracts.

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

Mappings sind also sehr nützlich, aber manchmal möchten wir auch in der Lage sein, die Schlüssel zu iterieren oder sie zu zählen. Ein gängiges Muster besteht darin, ein Array zu verwenden, um die Liste der vorhandenen Zuordnungen zu speichern.

Schauen Sie sich hier "Mapped Struct with Index" an: Gibt es gut gelöste und einfache Speichermuster für Solidity?

Ich hoffe es hilft.

A mappingist kein array. Sie können nicht darüber iterieren. Es ist für O(1)Operationen gedacht. Quelle

Wenn Sie alle bekannten vorhandenen durchlaufen oder einfach abrufen structs, würde ich Folgendes vorschlagen.

1: Speichern Sie die structsin anarray

2: Wenn Sie Schlüsselpaarzuordnungen mit wünschen address: verwenden Sie mapping(address => uint256)where uint256is the indexto the structin the array.

Hinweis: Da ich Ihre vollständigen Anforderungen nicht kenne, gibt es möglicherweise eine bessere Strategie. Bewerten und analysieren Sie genau, was Ihre Bedürfnisse aus dem Smart Contract sind, und fahren Sie von dort aus fort. :)

Wie Rob über das Mapping erwähnt hat. Wenn Sie alle Daten im Frontend anzeigen möchten, ist es am besten, die Adressen auch in einem separaten Array zu speichern. Auf diese Weise erhalten Sie eine Liste aller in der Zuordnung gespeicherten Adressen.

Der zweite Schritt besteht darin, alle Adressen aus dem Array abzurufen und die for-Schleife am Frontend zu verwenden und die einzelnen Daten einzeln abzurufen.