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

更新於 2022/03/19閱讀時間約 1 分鐘
這篇我們來看一個在程式開發很常見也很常用的一個東西: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的陣列簡單的介紹,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享,謝謝。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
為什麼會看到廣告
avatar-img
20會員
38內容數
目前加密貨幣的市場上幣種非常的多 讓你看得眼花撩亂了嗎? 可以藉由這一系列的加密貨幣分析 能夠幫忙您了解每一個加密貨幣它的價值所在 每一集都會介紹一種幣 是一個很實用的專題,歡迎大家訂閱~
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
宅D嘉的沙龍 的其他內容
由上篇看起來已經沒問題,我也一直用這樣的方式在上班看著幣價(噓~),後來發現了一點問題,我們看一下圖片: 加入Excel常用的函數:VLOOKUP VLOOKUP(搜尋準則, 範圍, 索引, 已排序)
在寫程式裡面,錯誤的檢查和處理是一定要有的,也是相對重要的,但Solidity裡面並沒有ErrorMessage這種東西,有的是Require()、Revert()、Assert()這三個函數,作用大概也跟ErrorMessage差不多,這裡介紹這三種函數的用法
我們知道function除了四種可見度 (visibility) 之外,還有三種比較常見的函式修飾詞(view、pure、payable),這篇就也來認識一下這三種函式修飾詞是做什麼用的吧。
事件(Event)在整個智能合約開發裡面是很常見也很常出現的應用,所以這篇我們就來說說Event到底該怎麼寫、怎麼應用。
繼承是智能合約開發很常見也很重要的一種方法,繼承主要是子合約可以從父合約中繼承所有的屬性和方法。 繼承寫法很簡單,就是在子合約後面加入"is"父合約的名稱就可以了
這篇我們來談談有關Solidity Function visibility(能見度) Solidity的function visibility有四個關鍵字(private、internal、external或public)。
由上篇看起來已經沒問題,我也一直用這樣的方式在上班看著幣價(噓~),後來發現了一點問題,我們看一下圖片: 加入Excel常用的函數:VLOOKUP VLOOKUP(搜尋準則, 範圍, 索引, 已排序)
在寫程式裡面,錯誤的檢查和處理是一定要有的,也是相對重要的,但Solidity裡面並沒有ErrorMessage這種東西,有的是Require()、Revert()、Assert()這三個函數,作用大概也跟ErrorMessage差不多,這裡介紹這三種函數的用法
我們知道function除了四種可見度 (visibility) 之外,還有三種比較常見的函式修飾詞(view、pure、payable),這篇就也來認識一下這三種函式修飾詞是做什麼用的吧。
事件(Event)在整個智能合約開發裡面是很常見也很常出現的應用,所以這篇我們就來說說Event到底該怎麼寫、怎麼應用。
繼承是智能合約開發很常見也很重要的一種方法,繼承主要是子合約可以從父合約中繼承所有的屬性和方法。 繼承寫法很簡單,就是在子合約後面加入"is"父合約的名稱就可以了
這篇我們來談談有關Solidity Function visibility(能見度) Solidity的function visibility有四個關鍵字(private、internal、external或public)。
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
陣列(Array)是 JavaScript 中用來儲存一組有序資料的集合。 陣列可以包含各種資料型別的值,例如數字、字串、布林值,甚至其他陣列或物件。了解陣列的基本操作是編寫高效 JavaScript 程式碼的重要基礎。
Thumbnail
什麼是Array(陣列) array跟object一樣是一種資料的容器,不同的是array通常用來裝同類別的資料,就像是書架用來收納書。要在書架裡放書跟其他東西也是可以的,但就是有點奇怪,不是大家習慣的做法。 array透過[]宣告。 假設我們要儲存使用者喜歡的顏色這筆資料,每筆資料的類型
Thumbnail
這篇內容,將會講解什麼是陣列,以及與陣列相關的知識。包括陣列的簡介、陣列的資料限制、陣列的維度、一維陣列、二維陣列。
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
※ 好用的陣列迭代器:forEach forEach 的使用時機: 需要從頭到尾把陣列中的每一個元素都印出來 ,就適合使用 forEach 方法。 forEach 的必要參數是一個函式: forEach() 的功能是把陣列的每個元素都丟進某個函式執行一次,因此必要的參數是一個函式。 語法:
※ 常用arry型態的方法: 長度: length 查詢第N個元素: [] 查詢元素在第N個: indexOf( ) 判斷是否為array: isArray() 新增和刪除: push():新增後面的數值 unshift():新增前面的數值 pop():刪除後面的數值 sh
Thumbnail
分享在網路上看到的陣列題目。通常 for...of 的 value 是陣列中的每個值,那如果我們在迭代中對陣列操作會發生什麼事? 題目來源:https://x.com/_jayphelps/status/1774640511158022335?s=20
Thumbnail
題目會給定一個陣列nums和一個目標值goal。計算子陣列總和=goal的數目有多少。演算法包含前綴和和字典的技巧,時間複雜度為O(n),空間複雜度為O(n)。
Thumbnail
題目敘述 題目會給定我們兩個整數陣列作為輸入nums1, nums2,要求我們找出兩個陣列的差異值。 找出在nums1但是不在nums2的元素,以陣列的形式放在answer[0]輸出。 找出在nums2但是不在nums1的元素,以陣列的形式放在answer[1]輸出。 題目的原文敘述
Thumbnail
題目敘述 題目會給我們一個輸入陣列nums,和一個指定的k值。 請問,在輸入陣列nums中,有幾個子陣列的元素總合恰好為k ? 例如: nums = [1,2,3], k = 3 則有兩個子陣列的元素總合為3,分別是[1,2] 和 [3] 如果是第一次聽到或接觸前綴和prefix的同學
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
陣列(Array)是 JavaScript 中用來儲存一組有序資料的集合。 陣列可以包含各種資料型別的值,例如數字、字串、布林值,甚至其他陣列或物件。了解陣列的基本操作是編寫高效 JavaScript 程式碼的重要基礎。
Thumbnail
什麼是Array(陣列) array跟object一樣是一種資料的容器,不同的是array通常用來裝同類別的資料,就像是書架用來收納書。要在書架裡放書跟其他東西也是可以的,但就是有點奇怪,不是大家習慣的做法。 array透過[]宣告。 假設我們要儲存使用者喜歡的顏色這筆資料,每筆資料的類型
Thumbnail
這篇內容,將會講解什麼是陣列,以及與陣列相關的知識。包括陣列的簡介、陣列的資料限制、陣列的維度、一維陣列、二維陣列。
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
※ 好用的陣列迭代器:forEach forEach 的使用時機: 需要從頭到尾把陣列中的每一個元素都印出來 ,就適合使用 forEach 方法。 forEach 的必要參數是一個函式: forEach() 的功能是把陣列的每個元素都丟進某個函式執行一次,因此必要的參數是一個函式。 語法:
※ 常用arry型態的方法: 長度: length 查詢第N個元素: [] 查詢元素在第N個: indexOf( ) 判斷是否為array: isArray() 新增和刪除: push():新增後面的數值 unshift():新增前面的數值 pop():刪除後面的數值 sh
Thumbnail
分享在網路上看到的陣列題目。通常 for...of 的 value 是陣列中的每個值,那如果我們在迭代中對陣列操作會發生什麼事? 題目來源:https://x.com/_jayphelps/status/1774640511158022335?s=20
Thumbnail
題目會給定一個陣列nums和一個目標值goal。計算子陣列總和=goal的數目有多少。演算法包含前綴和和字典的技巧,時間複雜度為O(n),空間複雜度為O(n)。
Thumbnail
題目敘述 題目會給定我們兩個整數陣列作為輸入nums1, nums2,要求我們找出兩個陣列的差異值。 找出在nums1但是不在nums2的元素,以陣列的形式放在answer[0]輸出。 找出在nums2但是不在nums1的元素,以陣列的形式放在answer[1]輸出。 題目的原文敘述
Thumbnail
題目敘述 題目會給我們一個輸入陣列nums,和一個指定的k值。 請問,在輸入陣列nums中,有幾個子陣列的元素總合恰好為k ? 例如: nums = [1,2,3], k = 3 則有兩個子陣列的元素總合為3,分別是[1,2] 和 [3] 如果是第一次聽到或接觸前綴和prefix的同學