Solidity - 数组
数组是一种数据结构,它存储相同类型元素的固定大小的顺序集合。 数组用于存储数据的集合,但将数组视为相同类型的变量的集合通常更有用。
您可以声明一个数组变量(例如numbers)并使用numbers[0]、numbers[1]和...、numbers[99,而不是声明单个变量(例如number0、number1、...和number99) ] 代表各个变量。 数组中的特定元素通过索引来访问。
在 Solidity 中,数组可以是编译时固定大小或动态大小。 对于存储数组来说,它也可以有不同类型的元素。 对于内存数组,元素类型不能映射,如果要用作函数参数,则元素类型应该是 ABI 类型。
所有数组都由连续的内存位置组成。 最低地址对应于第一个元素,最高地址对应于最后一个元素。
声明数组
要在 Solidity 中声明固定大小的数组,程序员指定数组所需的元素类型和元素数量,如下所示 −
type arrayName [ arraySize ];
这称为一维数组。 arraySize 必须是大于零的整数常量,type 可以是任何有效的 Solidity 数据类型。 例如,要声明一个名为 Balance 的 uint 类型的 10 元素数组,请使用以下语句 −
uint balance[10];
要在 Solidity 中声明动态大小的数组,程序员需要指定元素的类型,如下所示 −
type[] arrayName;
初始化数组
您可以逐个初始化 Solidity 数组元素或使用单个语句,如下所示 −
uint balance[3] = [1, 2, 3];
大括号 [ ] 之间的值的数量不能大于我们为方括号 [ ] 之间的数组声明的元素数量。以下是分配数组的单个元素的示例 −
如果省略数组的大小,则会创建一个足以容纳初始化的数组。 因此,如果你写 −
uint balance[] = [1, 2, 3];
您将创建与上一个示例中完全相同的数组。
balance[2] = 5;
上述语句将数组中第 3rd 号元素的值指定为 5。
创建动态内存数组
动态内存数组是使用new关键字创建的。
uint size = 3; uint balance[] = new uint[](size);
访问数组元素
通过索引数组名称来访问元素。 这是通过将元素的索引放在数组名称后面的方括号内来完成的。 例如 −
uint salary = balance[2];
上述语句将从数组中获取第 3rd 个元素,并将值赋给工资变量。 以下是一个示例,它将使用所有上述三个概念,即。 声明、赋值和访问数组 −
成员
length − length 返回数组的大小。 length 可用于通过设置来更改动态数组的大小。
push − Push 允许将一个元素追加到动态存储数组的末尾。 它返回数组的新长度。
示例
尝试以下代码来了解数组在 Solidity 中的工作原理。
pragma solidity ^0.5.0; contract test { function testArray() public pure{ uint len = 7; //dynamic array uint[] memory a = new uint[](7); //bytes is same as byte[] bytes memory b = new bytes(len); assert(a.length == 7); assert(b.length == len); //access array variable a[6] = 8; //test array variable assert(a[6] == 8); //static array uint[3] memory c = [uint(1) , 2, 3]; assert(c.length == 3); } }