Mapping
📌

Mapping

Tags
Solidity
Mapping
Basics
Datentypen
Published
Published February 17, 2023
In Solidity können sogenannte Mappings verwendet werden, um Daten in einem Verknüpfungsliste zu speichern. Ein Mapping wird in der Syntax mapping(keyType => valueType) definiert.
Der keyType muss dabei ein vordefinierter Typ sein, wie beispielsweise bytes, string, uint oder address. Der valueType kann jeder beliebige Datentyp sein. Es ist sogar möglich, ein weiteres Mapping oder ein Array als valueType zu verwenden. Dabei handelt es sich dann um ein verschachteltes Mapping (siehe Beispiel NestedMapping), welches sehr schnell komplex werden kann.
Wichtig zu beachten ist, dass Mappings nicht in for- oder while-Loops verwendet werden können, da sie nicht iterierbar sind. Dies bedeutet, dass man nicht alle Schlüssel (keys) oder Werte (values) in einem Mapping in einer Schleife durchlaufen kann. Stattdessen müssen andere Methoden (get) verwendet werden, um auf die Daten in einem Mapping zuzugreifen.
Um einen Verknüpfung in einem Mapping zu erstellen, wird im folgenden Beispiel die Funktion set erstellt und für diese Art von Operation verwendet. Sofern eine Verknüpfung aus dem Mapping gelöscht werden soll, gibt es die Operation delete. Diese Operation haben wir in der Funktion remove . Mithilfe dieser Funktion können wir ein Verknüpfung aus address und uint auflösen. Nachdem Auflösen wird der uint-Wert auf den Default-Wert gesetzt. Im Fall der des uints-Datentypens ist der Default-Wert 0.
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; contract Mapping { // Mapping einer Adress zu einem uint mit dem Variablen-Namen myMap mapping(address => uint) public myMap; function get(address _addr) public view returns (uint) { // Mapping geben immer einen Wert zurück. // Wenn ein Mapping nicht initialisiert worden ist, wird es den default-Wert zurückgeben. return myMap[_addr]; } function set(address _addr, uint _i) public { // Überschreibt den uint-Wert, welcher hinter der _addr-Adresse im Mapping hierlegt worden ist. myMap[_addr] = _i; } function remove(address _addr) public { // Zurücksetzen der Wertes der _addr-Adresse im Mapping auf den Default-Wert. delete myMap[_addr]; } } contract NestedMapping { // Verschachteltes mapping = Mapping einer Adresse auf ein weiteres Mapping mapping(address => mapping(uint => bool)) public nested; // Wert des verschachtelten Mappings erhalten/auslesen function get(address _addr1, uint _i) public view returns (bool) { return nested[_addr1][_i]; } // Wert des verschachtelten Mappings überschreiben function set( address _addr1, uint _i, bool _boo ) public { nested[_addr1][_i] = _boo; } // Wert des verschachtelten Mappings auf den Default-Wert zurücksetzen function remove(address _addr1, uint _i) public { delete nested[_addr1][_i]; } }
⬅️ Vorherige Lektion
Nächste Lektion ➡️