Solidity - 陣列



陣列是一種資料結構,它儲存固定大小的相同型別元素的順序集合。陣列用於儲存資料集合,但通常將其視為相同型別變數的集合更有用。

無需宣告單個變數,例如 number0、number1……和 number99,而是宣告一個數組變數,例如 numbers,並使用 numbers[0]、numbers[1]……和 numbers[99] 來表示單個變數。陣列中的特定元素透過索引訪問。

在 Solidity 中,陣列可以是編譯時固定大小的,也可以是動態大小的。對於儲存陣列,它也可以具有不同型別的元素。對於記憶體陣列,元素型別不能是對映,如果要將其用作函式引數,則元素型別應為 ABI 型別。

所有陣列都由連續的記憶體位置組成。最低地址對應於第一個元素,最高地址對應於最後一個元素。

宣告陣列

要在 Solidity 中宣告固定大小的陣列,程式設計師需要指定元素的型別和陣列所需的元素數量,如下所示:

type arrayName [ arraySize ];

這稱為一維陣列。**arraySize** 必須是大於零的整數常量,**type** 可以是任何有效的 Solidity 資料型別。例如,要宣告一個名為 balance 的 10 元素 uint 型別陣列,可以使用以下語句:

uint balance[10];

要在 Solidity 中宣告動態大小的陣列,程式設計師需要指定元素的型別,如下所示:

type[] arrayName;

初始化陣列

您可以逐個初始化 Solidity 陣列元素,或者使用單個語句,如下所示:

uint balance[3] = [1, 2, 3];

花括號 [ ] 中的值的數量不能大於我們在方括號 [ ] 中為陣列宣告的元素數量。以下是如何賦值陣列單個元素的示例:

如果您省略陣列的大小,則會建立一個剛好足以容納初始化資料的陣列。因此,如果您編寫:

uint balance[] = [1, 2, 3];

您將建立與前一個示例中完全相同的陣列。

balance[2] = 5;

上面的語句將陣列中第 3 個元素的值賦值為 5。

建立動態記憶體陣列

動態記憶體陣列使用 new 關鍵字建立。

uint size = 3;
uint balance[] = new uint[](size);

訪問陣列元素

透過索引陣列名稱來訪問元素。這是透過在陣列名稱之後方括號中放置元素的索引來完成的。例如:

uint salary = balance[2];

上面的語句將從陣列中獲取第 3 個元素並將值賦給 salary 變數。以下是一個示例,它將使用上述三個概念,即宣告、賦值和訪問陣列:

成員

  • **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);
   }
}
廣告
© . All rights reserved.