solidity数组

Posted 轩渊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了solidity数组相关的知识,希望对你有一定的参考价值。

数组类型

Solidity 支持两种数组: 静态数组和动态数组。

又分storagememory型数组

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数组的主要内容,如果未能解决你的问题,请参考以下文章

区块链 以太坊 solidity 如何比较2个字符串相等

区块链Solidity智能合约与Solidity介绍

区块链 以太坊 solidity 什么时候使用storagememory

区块链特辑——solidity语言基础

区块链Solidity智能合约语言学习笔记

03-Solidity8.0变量