Zuordnung zu einer Zuordnung? oder Zuordnung zu einer Struktur

Ist es möglich, etwas Ähnliches wie das Folgende zu tun? Derzeit wird beim Kompilieren ein Fehler ausgegeben, der besagt, dass "Name auf eine Struktur, Aufzählung oder einen Vertrag verweisen muss". Ich habe auch ein "Arbeiten?" Lösung weiter unten, aber ich bin mir nicht sicher, was der richtige Weg wäre.

mapping(address => uint256) shelf;
mapping (address => shelf) bookcase;

Die Idee ist, dass eine Adresse auf ein Bücherregal zeigen würde, das zu einem Regal führt, das zu einem int (Anzahl der Bücher) führt.

Das Folgende funktioniert bisher gut, um den Wert für das Regal festzulegen. Das Problem in dieser Version ist, dass ich das Bücherregal nicht öffentlich machen kann und nicht herausfinden kann, wie man einen Getter erstellt.

struct shelf
{
  mapping(address => uint256) shelves;      
}
mapping (address => shelves) bookcase;
bookcase[msg.sender] = shelf();
//shelf_address is argument from the function this code is in
bookcase[msg.sender].shelves[shelf_address] = 1;

Danke für die Hinweise.

Antworten (1)

So verwenden Sie verschachtelte Zuordnungen und Strukturen innerhalb einer Zuordnung.

Zugänglich über bookcase[--address--][--index--].books / bookcase[--address--][--index--].shelfId Im wirklichen Leben würden Sie die zweite Zuordnung jedoch zu einem Array machen.

pragma solidity ^0.4.10;

contract Mappings {
    mapping(address => mapping(uint256 => Shelf)) bookcase;
    struct Shelf {
      bytes32[] books;
      uint shelfId;
    }
}