Содержание

Mapping в Solidity

Тип mapping объявляется так mapping(_KeyType => _ValueType). Здесь _KeyType. может быть почти любого типа за исключение mapping, динамического массива, контракта, перечисления и структуры. _ValueType. может быть любого типа, включая mapping.

Mapping можно рассматривать как хеш-таблицу, которая фактически инициализирована таким образом, что существуют все возможные ключи, и ключи сопоставлены значениям, байт-представление которых состоит из нулей: значение по умолчанию типа. На этом сходство заканчивается. В действительности в mapping хранится не ключ, а только его хеш keccak256, используемый для поиска значения.

Поэтому у mapping нет длины или концепции ключа или значения, которое «установлено».

Тип mapping разрешен только для глобальных переменных (или как хранилище ссылочных типов в internal-функциях).

Mapping можно указывать как public. При этом в Solidity создается геттер-функция_KeyType становится принимаемым параметром, а геттер-функция возвращает _ValueType.

Геттер-функция будет иметь по одному параметру для каждого _KeyType.

pragma solidity ^0.4.0;

contract MappingExample {
    mapping(address => uint) public balances;

    function update(uint newBalance) public {
        balances[msg.sender] = newBalance;
    }
}

contract MappingUser {
    function f() public returns (uint) {
        MappingExample m = new MappingExample();
        m.update(100);
        return m.balances(this);
    }
}

Примечание

Тип mapping не итерируем, но можно реализовать структуру данных поверх него.

Материал был полезен? Поделитесь в соц. сетях:
Логотип echain.ru

Добавить комментарий

Ваш e-mail не будет опубликован.