📜  Solidity-数组

📅  最后修改于: 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];

上面的语句将来自阵列第三元件和分配值,以薪水变量。以下是一个示例,它将使用上述所有三个概念。声明,赋值和访问数组-

会员

  • 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);
   }
}