如果你想建立一個集合璃吧,可以用 數(shù)組這樣的數(shù)據(jù)類型. Solidity 支持兩種數(shù)組: 靜態(tài) 數(shù)組和動態(tài) 數(shù)組:
// 固定長度為2的靜態(tài)數(shù)組:
uint[2] fixedArray;
// 固定長度為5的string類型的靜態(tài)數(shù)組:
string[5] stringArray;
// 動態(tài)數(shù)組衫生,長度不固定,可以動態(tài)添加元素:
uint[] dynamicArray;
你也可以建立一個 結(jié)構(gòu)體類型的數(shù)組 例如郁岩,上一章提到的 Person:
Person[] people; // 這是動態(tài)數(shù)組抢呆,我們可以不斷添加元素
記住:狀態(tài)變量被永久保存在區(qū)塊鏈中脏答。所以在你的合約中創(chuàng)建動態(tài)數(shù)組來保存成結(jié)構(gòu)的數(shù)據(jù)是非常有意義的。
公共數(shù)組
你可以定義 public 數(shù)組, Solidity 會自動創(chuàng)建 getter 方法. 語法如下:
Person[] public people;
其它的合約可以從這個數(shù)組讀取數(shù)據(jù)(但不能寫入數(shù)據(jù))亩鬼,所以這在合約中是一個有用的保存公共數(shù)據(jù)的模式以蕴。
實戰(zhàn)演習
為了把一個僵尸部隊保存在我們的APP里,并且能夠讓其它APP看到這些僵尸辛孵,我們需要一個公共數(shù)組。
創(chuàng)建一個數(shù)據(jù)類型為 Zombie 的結(jié)構(gòu)體數(shù)組赡磅,用 public 修飾魄缚,命名為:zombies.
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
}