這篇我們來看一個在程式開發很常見也很常用的一個東西:Array 陣列
Array在所有的程式開發中還蠻常見的,也一定會出現,因為有很多的資料都會是一長串的,需要有一個物件來去做集中管理,我們來看一下它的定義:
在計算機科學中,
陣列資料結構(英語:array data structure),簡稱
陣列(英語:Array),是由相同類型的元素(element)的集合所組成的
資料結構,分配一塊連續的記憶體來儲存。利用元素的索引(index)可以計算出該元素對應的儲存位址。(出處:
維基百科)
在台灣,我們稱它為陣列,大陸稱它為數組,其實說的是一樣的東西,都是代表相同元素的集合所組成的資料結構,說白一點就是一個相同元素的集合,可以把它看成是一種容器,裡面裝著相同元素(Integer或String或其他...)的容器,下面我們來看一下怎麼宣告和應用它。
宣告式:
在Solidity有幾種宣告的方式:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract Array {
//宣告式
uint[] public array1; //宣告為一維數值陣列,但不宣告數量,之後靠push新增
uint[3] public array2; //宣告一維數值陣列,且數量為3,但內容為空
uint[] public array3 = [1,2,3];//宣告一維數值陣列,且數量為3,但內容分別為1,2,3
}
從上面的宣告式可以看出,陣列有分一維、二維、多維陣列,可以想像成是電影院的座位,一維就只看成是只有一排,裡面就只有第幾個位子之分,二維就是第幾排和第幾個位子,三維就是再加上有選哪一廳,然後再選哪一排和哪一個位子,以此類推。
應用:
接下來我們來看一下Array有哪些方法可以應用:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract Array {
//宣告式
uint[] public array1;//宣告為一維數值陣列,但不宣告數量,之後靠push新增
uint[3] public array2;//宣告一維數值陣列,且數量為3,但內容為空
uint[] public array3 = [1,2,3];//宣告一維數值陣列,且數量為3,但內容分別為1,2,3
//新增 (push是添加欄位也同時添加資料到最後面,比如說目前是array1[3], 那就會新增array1[4]了)
function push(uint _number) public {
array1.push(_number); //_number代表的是新的欄位的數值
}
//修改 (_idx:欄位、_number:數值)
function update(uint _idx, uint _number) public {
array1[_idx] = _number; //重新給某欄位一個新的值
}
//刪除欄位
function pop() public {
array1.pop();
}
//查看陣列長度
function getLength() public view returns (uint) {
return array1.length;
}
//清空陣列某欄位上面的資料,但該欄位不刪除,保留欄位空間,只刪除內容
function deleteElement(uint _idx) public {
delete array1[_idx];
}
}
上面我簡單的寫了程式裡面常見到的新增、修改、刪除等指令,你只要想像陣列就是有一個容器,裡面有很多個欄位,然後每個欄位都能裝不同的資料就會比較能理解陣列了。
需要特別注意的是:當宣告了一個固定長度了的陣列,如上面的array2,此時就不能再用push來添加新的欄位了,不然會報錯,push只能用在宣告為無固定長度的陣列使用。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract Array {
uint[3] public array2;//宣告一維數值陣列,且欄位數量為3,但內容為空
function push2(uint _number) public {
array2.push(_number);//_number代表的是新的欄位的數值
}
}
所以在宣告陣列時需要特別的注意,但修改內容還是可以的,以上就是對於Solidity的陣列簡單的介紹,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享,謝謝。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。