序列
序列类似与数组,但它有动态长度可以在运行时改变(就像字符串)。由于序列是可变大小的,所以它们总是在堆上分配以及垃圾收集。
序列总是带有一个int类型索引从0位置开始。len,low,high操作同样作用于序列。x[i]符号可以用于访问x的第i个元素。
序列可以通过数组构造器[]结合数组序列操作符@来构造。另一种为序列分配空间的方法是调用内置的newSeq过程。
一个序列可以被传递给一个开放数组的参数。
Example:
var
x: seq[int] # a sequence of integers
x = @[1, 2, 3, 4, 5, 6] # the @ turns the array into a sequence
序列变量用nil初始化。然而,由于性能的原因很多的序列操作不能处理nil(导致引发一个异常)。因此应该用空序列@[]而不是nil作为空值。但是@[]在堆上创建了一个序列对象,所以在这里需要做一个权衡 。
for语句可以使用一个或两个变量当用于一个序列的时候。当你使用一个变量的形式,这个变量将会持有序列提供的值。for语句从系统模型的items()迭代器循环这个结果。但是如果你使用两个变量的形式,第一个变量将保存索引位置,第二个变量将保存值,第二种形式for语句是从系统模型的pairs()迭代器循环结果。
for i in @[3, 4, 5]:
echo($i)
# --> 3
# --> 4
# --> 5
for i, value in @[3, 4, 5]:
echo("index: ", $i, ", value:", $value)
# --> index: 0, value:3
# --> index: 1, value:4
# --> index: 2, value:5