更新於 2022/03/19閱讀時間約 1 分鐘

智能合約開發實戰(十) - Array 陣列

這篇我們來看一個在程式開發很常見也很常用的一個東西: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的陣列簡單的介紹,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享,謝謝。 如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.