Solidity 字典映射Mappings
来源:互联网 发布:mysql安装教程mac 编辑:程序博客网 时间:2024/06/05 03:43
语法
mapping(_KeyType => _ValueType)
字典/映射其实就是一个一对一键值存储关系。
举个例子:
{age: 28, height: 172, name: liyuechun, wx: liyc1215}
这就是一个映射,满足_KeyType => _ValueType之间的映射关系,age对应一个28的值,height对应160,name对应liyuechun, wx对应liyc1215。
PS:同一个映射中,可以有多个相同的值,但是键必须具备唯一性。
案例
pragma solidity ^0.4.4;
contract MappingExample {
// 测试账号
// 0xca35b7d915458ef540ade6068dfe2f44e8fa733c
// 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
// 0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db
mapping(address => uint) balances;
function update(address a,uint newBalance) public {
balances[a] = newBalance;
}
// {0xca35b7d915458ef540ade6068dfe2f44e8fa733c: 100,0x14723a09acff6d2a60dcdf7aa4aff308fddc160c: 200,0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db: 300 }
function searchBalance(address a) constant public returns (uint) {
return balances[a];
}
}
结构体和字典综合案例
pragma solidity ^0.4.4;
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) public 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) public 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) public 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;
}
}
mapping(_KeyType => _ValueType)
字典/映射其实就是一个一对一键值存储关系。
举个例子:
{age: 28, height: 172, name: liyuechun, wx: liyc1215}
这就是一个映射,满足_KeyType => _ValueType之间的映射关系,age对应一个28的值,height对应160,name对应liyuechun, wx对应liyc1215。
PS:同一个映射中,可以有多个相同的值,但是键必须具备唯一性。
案例
pragma solidity ^0.4.4;
contract MappingExample {
// 测试账号
// 0xca35b7d915458ef540ade6068dfe2f44e8fa733c
// 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
// 0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db
mapping(address => uint) balances;
function update(address a,uint newBalance) public {
balances[a] = newBalance;
}
// {0xca35b7d915458ef540ade6068dfe2f44e8fa733c: 100,0x14723a09acff6d2a60dcdf7aa4aff308fddc160c: 200,0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db: 300 }
function searchBalance(address a) constant public returns (uint) {
return balances[a];
}
}
结构体和字典综合案例
pragma solidity ^0.4.4;
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) public 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) public 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) public 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;
}
}
阅读全文
0 0
- Solidity 字典映射Mappings
- 继承映射(Inheritance Mappings)
- Image Mappings (图像映射)
- JPA Advanced Mappings(映射)
- JPA Advanced Mappings(映射)
- Elasticserach-mappings映射
- hibernate参考手册之---继承映射(Inheritance Mappings)
- Hibernate ManyToOne Mappings 多对一关联映射
- Hibernate One-to-Many Mappings 一对多关系映射
- Hibernate One-to-One Mappings 一对一关系映射
- 映射类型 字典 (python)
- Python中的映射:字典
- Python映射之字典
- Python映射类型:字典
- 字典映射代替switch
- 【Solidity】Solidity by Example
- 【Solidity】Solidity概述
- 在 Excel 2003 中创建 XML 映射 (Creating XML Mappings in Excel 2003)
- (1)helloworld:@Table、@Column、@Transient、@Temporal、@Enumerated
- SSH-CRUD-删除
- 多态+多态对象模型
- Python数据处理扩展包
- PL/SQ符号大全
- Solidity 字典映射Mappings
- 多线程的理解一
- Java for Web学习笔记(九二):消息和集群(7)RabbitMQ和消息模式(上)
- 数据结构实验之二叉树五:层序遍历
- IDEA搭建Spring+SpringMVC+mybatis框架教程
- 【tensorflow】CycleGAN + anaconda3 + tflearn + keras
- Eclipse创建Web工程的目录结构及含义
- 1064分段函数
- a new beginning