📅  最后修改于: 2020-11-04 04:22:33             🧑  作者: Mango
数组是一种数据结构,用于存储相同类型元素的固定大小的顺序集合。数组用于存储数据集合,但是将数组视为相同类型的变量集合通常会更有用。
无需声明单个变量(例如number0,number1,…和number99),而是声明一个数组变量(例如numbers),并使用numbers [0],numbers [1]和…,numbers [99]表示各个变量。数组中的特定元素由索引访问。
在Solidity中,数组可以是编译时固定大小的,也可以是动态大小的。对于存储阵列,它也可以具有不同类型的元素。如果是内存阵列,则元素类型不能被映射,如果要用作函数参数,则元素类型应为ABI类型。
所有阵列均包含连续的内存位置。最低地址对应于第一个元素,最高地址对应于最后一个元素。
要在Solidity中声明固定大小的数组,程序员可以指定元素的类型和数组所需的元素数量,如下所示-
type arrayName [ arraySize ];
这称为一维数组。 arraySize必须是一个大于零的整数常量,并且type可以是任何有效的Solidity数据类型。例如,要声明一个称为uint类型的balance的10元素数组,请使用以下语句-
uint balance[10];
要在Solidity中声明动态大小的数组,程序员可以指定元素的类型,如下所示-
type[] arrayName;
您可以如下一步一步地或使用一条语句来初始化Solidity数组元素-
uint balance[3] = [1, 2, 3];
大括号[]之间的值数不能大于我们为方括号[]之间的数组声明的元素数。以下是分配数组的单个元素的示例-
如果省略数组的大小,则会创建一个大小足以容纳初始化的数组。因此,如果您写-
uint balance[] = [1, 2, 3];
您将创建与上一个示例完全相同的数组。
balance[2] = 5;
上面的语句受让人元件数第三阵列中的值为5。
动态内存阵列是使用new关键字创建的。
uint size = 3;
uint balance[] = new uint[](size);
通过索引数组名称来访问元素。这是通过将元素的索引放在数组名称后面的方括号内来完成的。例如-
uint salary = balance[2];
上面的语句将来自阵列第三元件和分配值,以薪水变量。以下是一个示例,它将使用上述所有三个概念。声明,赋值和访问数组-
尝试以下代码以了解数组在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);
}
}