Collections
Arrays
The array type is a list of elements of the same type and the size does not change, so must be defined at compile time:
var a: array[2, int] = [3, 2]
Just as with basic variable types, the type can often be inferred:
var a = [3, 2]
If we don’t know the value, but still want to define it, we can declare it with the type and size:
var a: array[3, char]
Indexes
As with most programming languages, referencing an index in an array, starts at 0
:
var a: array = ['a', 'b', 'c','d']
echo("The first element of the array is ", a[0])
We can set a custom index range as well:
var
customArrayAlpha: array[-6 .. -3, char] = ['a', 'b', 'c', 'd']
customArrayInt: array[-3 .. 0, int] = [1, 2, 3, 4]
echo customArrayAlpha[-5] # output the second element
echo customArrayInt[-1] # output the third element
There is a prefix that can be used to target the last part of the array, so to get the last element, use ^
as a prefix:
var a: array = ['a', 'b', 'c','d']
echo("The last element of the array is ", a[^1])
Slicing
We can use a start .. stop
syntax to get a range of values in an array:
var a: array = ['a', 'b', 'c','d']
echo("Elements 0 to 2 in the array are ", a[ 0 .. 2])
Sequences
Sequences are dynamic in size and can grow as needed, there are two ways to define a new sequence:
var
sequenceA: seq[char] = @['a', 'b'] # to initialize with actual values
sequenceB = newSeq[char](2) # use this if size known ahead of time, as it is more efficient
To add to the sequence without a defined size, we use add
to assign a value:
var openSequence: seq[char] = @[]
openSequence.add('c')
To add to the sequence with a defined size, we would reference the index to add a value:
var knownSizeSequence: seq[int] = newSeq[int](2)
knownSizeSequence[0] = 2
knownSizeSequence[1] = 3
Sequence Length
To get the sequence length, you can use the len
syntax:
var sequenceNum = @[4, 5, 6]
echo sequenceNum.len # outputs 3
Sets
Sets are an ordinal type (only accepts values that can be counted) and must each value must be unique. It can include char
, int8
, int16
, enum
, and unit8
for example.
var charSet: set[char]
charSet = {'a', 'e', 'c', 'd'}
The order of the items being stored are not kept track of, so we cannot use an index to get a value, but can use the in
keyword to see if a value is in the set:
var charSet: set[char]
charSet = {'a', 'e', 'c', 'd'}
echo 'c' in charSet # outputs true