Solidity開發(fā)基礎(chǔ)——數(shù)組
基本概念
Solidity中關(guān)于數(shù)組的定義如下:
數(shù)組是存儲(chǔ)相同數(shù)據(jù)類型的固定元素集合的數(shù)據(jù)結(jié)構(gòu);
數(shù)組可以在聲明時(shí)指定長度,也可以動(dòng)態(tài)調(diào)整大?。ㄩL度);
數(shù)組具有連續(xù)的內(nèi)存位置,通過索引訪問數(shù)組中的元素,索引從0開始;
數(shù)組元素可以是任何有效的Solidity數(shù)據(jù)類型,包括映射或結(jié)構(gòu)體。
創(chuàng)建數(shù)組
聲明語法
創(chuàng)建數(shù)組的語法如下:
數(shù)組類型
定長數(shù)組
指數(shù)組的大小需要在聲明時(shí)預(yù)定義,元素的總數(shù)不應(yīng)該超過數(shù)組的大小。如果數(shù)組在聲明時(shí)沒有進(jìn)行初始化,則數(shù)組中元素為默認(rèn)值(如對于存儲(chǔ)整型值的數(shù)組,其元素的默認(rèn)值為0)。
定長數(shù)組的聲明與初始化有以下兩種方法:
數(shù)組 a
定義了3個(gè)元素,并初始化為 [1, 2, 3],即 a[0] = 1, a[1] = 2, a[2] = 3。
數(shù)組 b
定義了3個(gè)元素,所有元素初始化為0,即指定數(shù)據(jù)類型的默認(rèn)值。
動(dòng)態(tài)數(shù)組
聲明數(shù)組時(shí),數(shù)組的大小沒有預(yù)定義。數(shù)組的大小隨元素的添加會(huì)改變,在運(yùn)行時(shí)數(shù)組的大小將被確定。
動(dòng)態(tài)數(shù)組的聲明如下:
動(dòng)態(tài)數(shù)組由于沒有指定數(shù)組長度,所以沒有初始化值。
內(nèi)存數(shù)組
可使用 new
關(guān)鍵字在內(nèi)存(memory)中基于運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建固定長度的數(shù)組。與 存儲(chǔ)(storage)數(shù)組相反的是,你不能通過修改成員變量 .push
改變內(nèi)存(memory)數(shù)組的大小,即內(nèi)存數(shù)組創(chuàng)建后的長度是固定的。
創(chuàng)建內(nèi)存數(shù)據(jù)的語法如下:
動(dòng)態(tài)數(shù)組中的元素總是以默認(rèn)值初始化。
數(shù)組成員
length
數(shù)組的 length
變量用于檢查數(shù)組中存在的元素的數(shù)量。內(nèi)存數(shù)組的大小在聲明時(shí)是固定的,而如果動(dòng)態(tài)數(shù)組是在運(yùn)行時(shí)定義的,則需要操作長度。
push(x)
數(shù)組的 push
函數(shù)用于在動(dòng)態(tài)數(shù)組中添加新元素。新元素總是添加在數(shù)組的最后一個(gè)位置。如果帶 x
參數(shù)則向數(shù)組添加給定值的元素,并且沒有返回。如果不帶 x
參數(shù)則向數(shù)組添加初始化元素,并返回元素的引用。
pop()
數(shù)組的 pop
函數(shù)用于從動(dòng)態(tài)數(shù)組的末尾移除元素,并在移除的元素上隱含調(diào)用 delete
。
合約例子
例子1
數(shù)組的聲明及基本操作。
輸出 :我們在Remix中編譯、部署和運(yùn)行上面的合約例子,執(zhí)行結(jié)果如下圖:

例子2
移除動(dòng)態(tài)數(shù)組中的元素(元素從右向左移動(dòng)),并改變數(shù)組長度。
輸出: 我們在Remix中編譯、部署和運(yùn)行上面的合約例子,執(zhí)行結(jié)果如下圖:
