solidity数组
Posted 轩渊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了solidity数组相关的知识,希望对你有一定的参考价值。
数组类型
Solidity 支持两种数组: 静态数组和动态数组。
又分storage
与memory
型数组
uint[] memory list;
//变长memory数组,使用前必须确定长度
list =new uint[](a);
//然后再使用,一般用在函数内
memory型数组不能使用pop,push也不能修改length
静态数组
// 固定长度为2的静态数组定义
uint[2] fixedArray;
//定长数组实例化
fixedArray = [4, 6];
静态数组不可新增元素,但可修改现有元素的值。
动态数组
动态数组,长度不固定,可以动态添加元素。
//声明
uint[] dynamicArray;
//初始化,这里实例化一个长度为2的数组,值为0。
dynamicArray = new uint[](2);
增删改查
新增
插入元素仅使用push,在尾部追加元素。
//插入数据后长度变为3了。
dynamicArray.push(123);
//长度为3
dynamicArray.length;
删除
两种删除方法:
- 使用delete关键字删除元素
delete dynamicArray[2];
- 使用pop方法删除,但pop只能删除末尾元素。
dynamicArray.pop();
二者的区别
使用delele不会实际删除元素,但会将元素置为零值,如0,Ox0,false等。数组长度不会改变。如果要消除数组中这个零值gap需要手动移动数组,将后面的元素往前移动,然后调用pop方法删除末尾空格,或者手动将长度减一。最保险的方法是:
- 找到目标元素位置
- 将目标元素与末尾元素对调;
- 调用pop方法。
修改
使用下标索引修改。
dynamicArray[2]=12;
查询
数组支持遍历查询。
for(uint i = 0;i < myArray.length; i++)
doSomething(myArray[i]);
有关索引
soldity索引从0开始。可以使用索引获取和修改数组值。
fixedArray[1] = 2;
数组成员
数组成员提供以下类型的成员方法。
- length,获取数组长度;
- push(),动态storage类型数组拥有此函数,该函数返回元素的引用。用于将元素追加到零值的数组中。使用方法如
x.push().t = 2
或者x.push()= b
- push(x), 动态storage数组拥有此方法。可以在数组后面追加数据。
- pop,动态storage数组拥有此方法,删除数组尾部元素,数组长度减1。
参考
以上是关于solidity数组的主要内容,如果未能解决你的问题,请参考以下文章