2017-12-05 22 views
0

Lassen Sie uns sagen, dass ich eine Struktur & eine Abbildung wie dieses:Gibt eine ganze Struktur in Solidität zurück?

struct myStruct { 
    address addr; 
    uint256 price; 
    bool approved; 
    } 

mapping(string => myStruct) mappy; 

Wie kann ich abrufen alle Schlüssel? Ich weiß, Solidität wird Getter generieren, wenn ich den Schlüssel habe, kann ich die Informationen aus der Struktur abrufen. Aber die Schlüssel sind mir unbekannt und ich muss die komplette Struktur abrufen.

Vielleicht wäre eine bessere Lösung, eine öffentliche Variable zu haben, die die Größe der Struktur hätte und ein Index hat Schlüssel und speichert den Schlüssel in der Struktur? So werde ich die Größe wissen und ich kann es iterieren

+0

Versuchen Sie, durch https://ethereum.stackexchange.com/questions/13167/are-there-solve-solved-and-simple-storage-patterns-for-solidity nach Vorschlägen zu gängigen Vertragsdesignmustern zu suchen. Sie sollten dort eine nützliche Lösung finden. –

Antwort

0

Als erstes sollten Sie nicht als Schlüssel Zeichenfolge verwenden, besser deklarieren Bytes32 als Zeichenfolge ist nur ein Alias ​​für sie.

Sie können einen Aufruf an das Mapping vornehmen, indem Sie den String-Schlüssel als Referenz angeben.

Es wird jedoch nur ein iteratives Array ohne die internen Schlüsselnamen abgerufen.

lassen Sie sich zum Beispiel sagen, Sie haben: mappy['a'], die folgenden Informationen wie diese

{ '0x000...000', 1, true }

der Anruf abzurufen ein einfaches Array enthält: ['0x000...000',1,true]

Wenn Sie es ein Objekt machen wollen Sie müssen es auf eigene Faust neu aufbauen.

Verwandte Themen