1.2 KiB
1.2 KiB
| title |
|---|
| Seqs |
Seqs
Seqs, abbreviated from "sequence", provide dynamically expandable storage.
There are two ways to create seqs, with the @ operator and with the newSeq[T](n: int) method. Once a seq is created, it can be modified using the add(item: T), delete(idx: int). The length of a seq can be found through len: int, and the maximum index through high: int. The standard items: T and pairs: tuple[i: int, v: T] iterators are also available.
var
a = @[1, 2, 3]
b = newSeq[int](3)
for i, v in a:
b[i] = v*v
for i in 4..100:
b.add(i * i)
b.delete(0) # takes «O(n)» time
b = a[0] & b # Same as original b
Immutability
While sequences are dynamiclly allocated, they are still immutable.
let a = @[1, 2, 3]
a.add(4)
will fail to compile because a cannot be assigned to. However,
var b = @[1, 2, 3]
b.add(4)
will work without any problems. If wanted, a seq can be passed to a method with the var or ref annotation to make it modifiable, so
proc foo(mySeq: var seq[int]) =
mySeq[9] = 999
var thisSeq = newSeq[int](10)
foo(thisSeq)
assert thisSeq[9] == 999