深入理解Solidity——映射

映射(Mappings)

映射类型定义方式为mapping(_KeyType => _KeyValue)键类型允许除映射、变长数组、合约、枚举、结构体外的几乎所有类型()。值类型没有任何限制,可以为任何类型包括映射类型。

映射可以被视作为一个Hash table,所有可能的键会被虚拟化的创建,映射到一个类型的默认值(二进制的全零表示)。在映射表中,并不存储键的数据,仅仅存储它的keccak256哈希值,这个哈希值在查找值时需要用到。

因此,映射是没有长度的,也没有键集合或值集合的概念。

映射类型,仅能用来作为状态变量,或在内部函数中作为storage类型的引用。

可以通过将映射标记为public,来让Solidity创建一个getter。通过提供一个做为参数来访问它,将返回对应的

映射的值类型也可以是映射,使用getter访问时,要提供这个映射值所对应的键。

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);
    }
}
注解
映射不是可迭代的,但可以在它们上面实现数据结构。例如,请参见迭代映射。

上一篇:深入理解Solidity——引用类型

下一篇:深入理解Solidity——delete

你可能感兴趣的:(Solidity文档翻译系列,以太坊去中心化应用开发)