携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情
复合类型的巧妙使用
在solidity中,除了内置的原生数据类型,还有一些复合类型,主要包括数组、映射等容器和自定义结构体
复合类型--数组
在solidity中,它支持定长数组和动态数组,但不管是定长数组还是动态数组,它们都有length元素,代表着数组组内元素的个数。因此,若要访问数组的元素,可以通过下标,动态数组可以通过push函数添加值
- 代码示例:
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract stringTest{
//定长数组
string[4] public nameTest;
//动态数组
uint[] public num;
function arrayTest ( )public returns(uint,uint){
//赋值的形式,如果是中文需要使用UTF-8编码。
nameTest[0]="JueJin";
//push添加值
num.push(20);
return (num.length,nameTest.length);
}
}
复合类型-映射(mapping)
solidity的mapping与Golang中的map非常类似,mapping也是基于键值对存储的容器,我们如果知道key,就能快速的知道其value值
- 语法
mapping(T1 => T2) modifiers name
// T1:数据类型一
// T2:数据类型二
// 通过T1类型映射出T2类型
- 代码示例(部分)
// 创建一个mapping
mapping(address=>string) public MapNames;
address public owner ;
constructor (){
//合约主持人
owner=msg.sender;
}
// 设置,初始化一个mapping
function SetmappingTest(string memory _x)public {
MapNames[owner]=_x;
}
//查询
function getmapTest( address addr)public view returns(string memory){
return MapNames[addr];
}
合约的使用方法
编译合约
我们启动了自动编译,如果没用就点击Compile ···.sol
部署合约
点击deploy即可部署合约。
使用函数
- 我们先测试一下owner,运行结果一个是操作合约的地址:
通过验证是一致的:
测试mapping:
- 初始化mapping:点击红框按钮
当我们看到控制台出现类似下图则说明成功:
- 查询:然后我们复制操作该函数的账户并粘贴到红框内:
点击call:
说明成功了!!!!!