2017-09-28 59 views
0

任何人都可以解释mapping的工作原理以及它为什么使用它?像数组是一个项目的集合。我没有扎实的经验,我刚刚开始。我在solidity官方文档页面上找到了这个代码。绘图如何在稳固中起作用,并且映射类似于其他流行语言中的另一种概念

pragma solidity ^0.4.11; 

Contract CrowdFunding { 
// Defines a new type with two fields. 
struct Funder { 
    address addr; 
    uint amount; 
} 

struct Campaign { 
    address beneficiary; 
    uint fundingGoal; 
    uint numFunders; 
    uint amount; 
    mapping (uint => Funder) funders; 
} 

uint numCampaigns; 
mapping (uint => Campaign) campaigns; 

function newCampaign(address beneficiary, uint goal) returns (uint campaignID) { 
    campaignID = numCampaigns++; // campaignID is return variable 
    // Creates new struct and saves in storage. We leave out the mapping type. 
    campaigns[campaignID] = Campaign(beneficiary, goal, 0, 0); 
} 

function contribute(uint campaignID) payable { 
    Campaign storage c = campaigns[campaignID]; 
    // Creates a new temporary memory struct, initialised with the given values 
    // and copies it over to storage. 
    // Note that you can also use Funder(msg.sender, msg.value) to initialise. 
    c.funders[c.numFunders++] = Funder({addr: msg.sender, amount: msg.value}); 
    c.amount += msg.value; 
} 

function checkGoalReached(uint campaignID) returns (bool reached) { 
    Campaign storage c = campaigns[campaignID]; 
    if (c.amount < c.fundingGoal) 
     return false; 
    uint amount = c.amount; 
    c.amount = 0; 
    c.beneficiary.transfer(amount); 
    return true; 
} 
} 

回答

1

基本上,映射相当于一个字典或其他编程语言的地图。这是重要的价值存储。

在标准数组中,它是索引查找,例如如果有数组中的10个元素的索引是0 - 9,它看起来像这样作为一个整数数组:

或者代码:

uint[] _ints; 

function getter(uint _idx) returns(uint) { 
    return _ints[_idx]; 
} 

所有按键都按顺序基于它们被添加到阵列的顺序。

映射工作稍有不同,描述它的最简单方法是使用重要查找。因此,如果这是地址映射到一个整数,那么它会是这个样子:

[0x000000000000000A] 555 
[0x0000000000000004] 123 
.... 
[0x0000000000000006] 22 
[0x0000000000000003] 6 

或者在代码

mapping(address => uint) _map; 

function getter(address _addr) returns(uint) { 
    return _map[_addr]; 
} 

因此,基本上,你有一个对象,而不是整数参考值短。钥匙也不必按顺序。

+1

很好的解释。此外,映射解释在这里:https://ethereum.stackexchange.com/questions/9893/how-does-mapping-in-solidity-work 我想补充说,有可能有一个映射内部映射在Solidity ;) –

相关问题