- Solidity 教程
- Solidity - 首頁
- Solidity - 概述
- Solidity - 環境搭建
- Solidity - 基本語法
- Solidity - 第一個應用
- Solidity - 註釋
- Solidity - 資料型別
- Solidity - 變數
- Solidity - 變數作用域
- Solidity - 運算子
- Solidity - 迴圈
- Solidity - 決策
- Solidity - 字串
- Solidity - 陣列
- Solidity - 列舉
- Solidity - 結構體
- Solidity - 對映
- Solidity - 型別轉換
- Solidity - 以太幣單位
- Solidity - 特殊變數
- Solidity - 樣式指南
- Solidity 函式
- Solidity - 函式
- Solidity - 函式修飾符
- Solidity - View 函式
- Solidity - Pure 函式
- Solidity - 回退函式
- 函式過載
- 數學函式
- 加密函式
- Solidity 常用模式
- Solidity - 提款模式
- Solidity - 受限訪問
- Solidity 高階
- Solidity - 合約
- Solidity - 繼承
- Solidity - 建構函式
- Solidity - 抽象合約
- Solidity - 介面
- Solidity - 庫
- Solidity - 彙編
- Solidity - 事件
- Solidity - 錯誤處理
- Solidity 有用資源
- Solidity - 快速指南
- Solidity - 有用資源
- Solidity - 討論
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);
}
}