陣列
陣列 (array) 是線性的容器,建立後長度不可改變,陣列中每個元素的型別皆需相同。
建立陣列
使用陣列實字可建立陣列,如下例:
var arr = [1, 2, 3, 4, 5]
assert(arr.len == 5)
assert(arr[2] == 3)
或是宣告空陣列後再填入值,如下例:
var arr: array[3, int]
arr[0] = 1
arr[1] = 42
arr[2] = 99
assert arr[0] == 1
assert arr[1] == 42
assert arr[2] == 99
assert arr.len == 3
走訪陣列
使用 for
結構可走訪陣列的元素,如下例:
var arr = [1, 2, 3, 4, 5]
for e in arr:
echo e
也可以使用計數器來走訪陣列,如下例:
var arr = [1, 2, 3, 4, 5]
for i in countup(arr.low, arr.high):
echo arr[i]
修改陣列元素
走訪陣列元素時,不可修改元素,否則會引發錯誤,如下例:
var arr = [1, 2, 3, 4, 5]
for e in arr:
# Error
e = e * e
如果想在走訪陣列元素時修改陣列,可使用計數器來走訪陣列,如下例:
var arr = [1, 2, 3, 4, 5]
for i in countup(arr.low, arr.high):
arr[i] = arr[i] * arr[i]
assert(arr == [1, 4, 9, 16, 25])
序列
序列 (sequence) 和陣列相似,也是線性的容器,序列元素皆為同型別。但序列可更動長度,實際上比陣列常用。
建立序列
使用序列實字可建立序列,和陣列的差別在於前面有一個 @
(小老鼠) 符號。
var seq = @[1, 2, 3, 4, 5]
assert(seq.len == 5)
assert(seq[2] == 3)
走訪序列
使用 for
可以走訪序列元素:
var seq = @[1, 2, 3, 4, 5]
for e in seq:
echo e
同樣地,也可以使用計數器來走訪:
var seq = @[1, 2, 3, 4, 5]
for i in countup(seq.low, seq.high):
echo seq[i]
修改序列元素
和陣列類似,走訪序列時不能修改序列元素:
var seq = @[1, 2, 3, 4, 5]
for e in seq:
# Error
e = e * e
若要在走訪時修改序列元素,可用計數器走訪序列:
var seq = @[1, 2, 3, 4, 5]
for i in countup(seq.low, seq.high):
seq[i] = seq[i] * seq[i]
assert(seq == @[1, 4, 9, 16, 25])
序列操作
序列和陣列的差別在於序列可動態改變長度,一些常見的序列操作如下:
var seq = @[1, 2, 3, 4, 5]
# Append in-place.
seq.add(99)
assert(seq == @[1, 2, 3, 4, 5, 99])
# `delete` returns nothing.
seq.delete(2)
assert(seq == @[1, 2, 4, 5, 99])
seq.insert(-1, 1)
assert(seq == @[1, -1, 2, 4, 5, 99])
在 sequtils
套件中,有更多序列操作方法,讀者可自行參考該模組的手冊。
openArray
openArray
型別僅用在程序的參數中,用來宣告參數的型別,相容於陣列和序列。