陣列英文array)喺程式編寫上係一種數據結構,概念上指可以用整數值嘅索引隨機存取入面嘅嘢嘅串列

狹義上,如果真係要隨機存取,陣列嘅元素(或者代表佢哋嘅某種代碼)要喺記憶體入面順序排列,而且每個元素(或者佢哋嘅代碼)要一樣大細、相同類型(例如 n 個整數或者 n 個浮點數等等),因為咁先可以用簡單嘅計算由索引嘅數值計出任何一件嘢嘅位置喺邊,例如 C 語系嘅陣列就係呢一種。[1][2]

喺實際應用上,喺某一啲嘅程式語言(例如一啲手稿語言),元素嘅資料類型可能唔使一樣,或者喺某啲情況下隨機存取只係貎似隨機存取;呢類陣列可以視為一種抽象資料類型甚至一種物件

陣列基本上係一種 1D 嘅結構,但係陣列入面嘅元素可以都係陣列。陣列入面放陣列,就得出 2D 嘅陣列;再將呢啲 2D 陣列放入 1D 嘅陣列,就得出 3D 嘅陣列,如此類推,就可以建立任何維度嘅陣列。

1D 嘅陣列概念上類似數學上嘅向量或者矩陣;2D 嘅陣列概念上類似數學上嘅矩陣

喺大多數嘅程式語言,陣列都係一定有嘅基本資料類型,但係唔係一定;例如喺最基本嘅 Lisp 就只有串列,冇陣列。

概論

睇埋:數據結構

索引值

喺好多嘅程式語言,陣列嘅索引都係由 0 開始計,呢個係因為如果由 1 開始數,就要減一先可以容易計啲嘢喺邊,但係 0 開始就唔使減,方便部電腦。但係某一啲嘅程式語言的確會由 1 開始數,甚至畀你自定邊個數開始數(例如 Pascal)。

1D 嘅例子

抽象咁舉個例子,下面呢張圖有一個 1D 嘅陣列,入面有 10 個元素(係乜類型嘅數據唔使理),索引係由 0 數到 9。如果呢個陣列叫 a,數學上呢十個元素就會叫  ,大部份程式語言則會寫成 a[0]a[1]a[2]⋯⋯a[9]

2D 嘅例子

再舉個例子,今次係 2D,例如我哋有一個 5 × 5 嘅陣列⸺5 個橫行,每個橫行 5 個字符⸺就好似下面張圖咁。

如果我哋叫呢個陣列做 b,咁 b[0] 就會係第 0 橫行(即係 A N N A  ),而 b[0][0] 就會係第 0 橫行嘅第 0 個字符,亦即係話,

  • b[0][0] 嗰件數據就會係 A
  • b[0][1] 嗰件數據就會係 N
  • b[0][2] 嗰件數據又會係 N

如此類推[1]

實現

頭先個 2D 例子

上面個 2D 嘅陣列,如果用 C 寫,可以寫成

char b[5][5] = { { 'A', 'N', 'N', 'A', ' ' },
                 { 'S', 'T', 'E', 'V', 'E' },
                 { ' ', ' ', ' ', ' ', ' ' },
                 { 'C', 'R', 'A', 'I', 'G' },
                 { ' ', ' ', ' ', ' ', ' ' } };

Numpy 嘅例子

睇埋:Numpy

Python 本身其實並冇一種佢叫陣列嘅嘢,但係佢嘅 Numpy 函式庫就提供上面稱為狹義陣列嘅嘢;以下係陣列喺 Python 入面嘅一啲實現例子:[2]

x = arr.array("i", [3, 6, 9, 12]) # 定義 x 呢個陣列,個陣列屬整數類型 ("i"),有 4 嚿數據。

y = x[0] # y 嘅值會變成同 x 第 0 嚿(數據嘅 index 由 0 數起)數據一樣,即係 y 會變成 3。

y = len(x) # y 嘅值會變成 x 嘅「長度」(有幾多件數據),喺呢個個案入面即係 4。

x.append(4) # 將 4 加入去 x 度,x 會變成 [3, 6, 9, 12, 4]。

x.pop(4) # 將 x 入面第 4 嚿數據剷走,即係會變返成 [3, 6, 9, 12]。

x.remove(3) # 將 x 入面值係 3 嘅數據剷走,即係會變成 [6, 9, 12]。

del x[0] # 將 x 入面第 0 嚿數據剷走,即係會變成 [9, 12]。

x.clear() # 將 x 入面嘅數據冚唪唥清走嗮,即係會變成 []。

睇埋