区块链学堂(24):Struct类型

Struct类型定义

例如定义一个struct类型的Person

  struct Person {
    string name;
    uint sexy; //0: 男性;1:女性;
    uint age;
    string mobile;
  }

建立一个Struct的Demo合约

  • Step 1: 撰写最基本的合约
pragma solidity 0.4.10;
contract DemoTypes9 {
  struct Person {
    string name;
    uint sexy; //0: 男性;1:女性;
    uint age;
    string mobile;
  }


  Person[] public PersonList;
}

最初的合约只定义了struct person类型,以及一个数组Person[] PersonList

  • Step 2: 给构造函数中添加初始化代码
    function DemoTypes9() {
      /*数组类型添加元素方式1*/
      uint id = PersonList.length++;
      Person p  = PersonList[id];
      p.name = "阿三";
      p.sexy = 0;
      p.age = 20;
      p.mobile = "13918802350";
    }
    
Step 1-2后,完整代码如下:
pragma solidity 0.4.10;
/*演示一下结构,如何和数组类型结合,一起使用;*/
contract DemoTypes9 {
  struct Person {
    string name;
    uint sexy; //0: 男性;1:女性;
    uint age;
    string mobile;
  }


  Person[] public PersonList;
  function DemoTypes9() {
    /*数组类型添加元素方式1*/
    uint id = PersonList.length++;
    Person p  = PersonList[id];
    p.name = "阿三";
    p.sexy = 0;
    p.age = 20;
    p.mobile = "13918802350";
  }
}
以上代码在Browser-solidity中的执行结果如下图所示:

  • Step 3: 添加一个AddPerson function, 使用之前的数组类型使用过的push方法
  function AddPerson (string _name, uint _sexy, uint _age, string _mobile) {
    /*数组类型添加元素方式2*/
    Person memory tmp;
    tmp.name = _name;
    tmp.sexy = _sexy;
    tmp.age = _age;
    tmp.mobile = _mobile;

    PersonList.push(tmp);
  }

Browser-solidity的执行情况如下:

  • Step4: 上面的AddPerson() 有点长,下面有一个更简单的方法 AddPerson2()
  function AddPerson2 (string _name, uint _sexy, uint _age, string _mobile) {
    /*数组类型添加元素方式3*/
    uint id = PersonList.length++;
    PersonList[id] = Person({name: _name, sexy: _sexy, age: _age, mobile: _mobile});
  }

AddPerson2() 的方法简洁了很多
Browser-solidity的执行情况如下

完整代码在下面:

pragma solidity 0.4.10;
/*演示一下结构,如何和数组类型结合,一起使用;*/
contract DemoTypes9 {
  struct Person {
    string name;
    uint sexy; //0: 男性;1:女性;
    uint age;
    string mobile;
  }


  Person[] public PersonList;
  function DemoTypes9() {
    /*数组类型添加元素方式1*/
    uint id = PersonList.length++;
    Person p  = PersonList[id];
    p.name = "阿三";
    p.sexy = 0;
    p.age = 20;
    p.mobile = "13918802350";
  }

  function AddPerson (string _name, uint _sexy, uint _age, string _mobile) {
    /*数组类型添加元素方式2*/
    Person memory tmp;
    tmp.name = _name;
    tmp.sexy = _sexy;
    tmp.age = _age;
    tmp.mobile = _mobile;

    PersonList.push(tmp);
  }

  function AddPerson2 (string _name, uint _sexy, uint _age, string _mobile) {
    /*数组类型添加元素方式3*/
    uint id = PersonList.length++;
    PersonList[id] = Person({name: _name, sexy: _sexy, age: _age, mobile: _mobile});
    }
}

原文:http://www.ethchinese.com/?p=1047

QQ群:559649971 (区块链学堂粉丝群)
个人微信:steven_k_colin

获取最新区块链咨询,请关注《以太中文网》微信公众号:以太中文网


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值