商朝是中國歷史上,第一個留下文字記載的朝代,在1899年首次發現甲骨文之後,考古學家與當地村民在河南安陽小屯村陸續挖掘出十幾萬片帶文字的龜甲獸骨,雖然都是盤庚遷殷之後所留下來的,但從記載內容可以上溯第一代帝王商湯及先祖,成為中國最早有考古證據的可信歷史。

從甲骨文紀錄結合史記與竹書紀年加以推測,商朝從西元前1558年成湯即位到西元前1046年紂王覆滅,共30位帝王,歷時512年。那個時代充滿殺伐征戰與血腥祭祀,部落之間經常掠奪人口為奴隸,一次征戰可出動數十部落、數千士兵,可以想像戰場上那種「臨兵鬥者皆陣列在前」的肅殺氣氛,令人不寒而慄。

商朝也是一個擅長貿易的國家,貿易範圍遠超過其邊界,從考古證據中,可以看到來自新疆的和田玉,有來自南海的大龜甲,東海的精緻海貝(還可當作貿易的貨幣),各地來的犀角象牙等等,所以「商人」成為從事貿易者的代名詞,流傳至今。

在程式設計裡面,「陣列(Array)」是用來處理大量同類資料的好方法,就像士兵列陣,排成「一字長蛇陣」,每個士兵都有編號,一個陣列視為一個整體(指定為一個變數或常數)。

陣列是一種衍生的資料類型,由一組同類型的資料集合而成,每個資料稱為陣列的「元素」。我們用商朝的帝王世系來寫個範例程式,陣列元素由字串構成。

// 1-4a 陣列(Array)
// Created by Heman, 2021/07/12

let 商王世系: [String] = [
    "大乙湯", "外丙勝", "仲壬庸", "大甲至",
    "沃丁絢", "大庚辯", "小甲高", "大戊密",
    "雍己伷", "中丁莊", "外壬發", "河亶甲整",
    "祖乙滕", "祖辛旦", "沃甲踰", "祖丁新",
    "南庚更", "陽甲和", "盤庚旬", "小辛頌",
    "小乙斂", "武丁昭", "祖庚曜", "祖甲載",
    "廩辛先", "庚丁囂", "武乙瞿", "文丁托",
    "帝乙羨", "帝辛紂" ]

print(商王世系[0])
print(商王世系[29])
print(商王世系[30])

for i in 0...29 {
    print(商王世系[i])
}

for 商王 in 商王世系 {
    print(商王)
}

在1-4a範例程式中,用 [String] 來宣告新的資料類型「字串陣列」,是由字串String同類資料所構成的陣列。

let 商王世系: [String]

定義一個常數「商王世系」,屬 [String] 資料類型,也就是「字串陣列」類型,然後給初始值,內容為30個商王的名號。

要取用陣列中的個別元素,可用「商王世系[i]」,其中 i 稱為陣列的索引(index),就像士兵的編號,從 0 開始算,「商王世系[0]」可取得陣列第一個商王的名號(資料值)。

所以上例中,最後(第30個)元素索引為29,也就是「商王世系[29]」。如果不小心用「商王世系[30]」就會出現錯誤,無法再執行下去(若是App會閃退)。所以必須將這行刪除或"Remark"起來,才能執行下去。

我們可以用 for 迴圈將整個世系印出來,有兩種方法,第一是利用索引值 0...29 來取用個別元素。

for i in 0...29 {
    print(商王世系[i])
}