• 数组和序列类型

    数组和序列类型

    数组是同类型的,这意味着数组中的每个元素都具有相同的类型。 数组总是具有指定为常量表达式的固定长度(开放数组除外)。 它们可以按任何序数类型索引。 参数 A 可以是 开放数组 ,在这种情况下,它由0到 len(A)- 1 的整数索引。 数组表达式可以由数组构造函数 [] 构造。 数组表达式的元素类型是从第一个元素的类型推断出来的。 所有其他元素都需要隐式转换为此类型。

    序列类似于数组,但动态长度可能在运行时期间发生变化(如字符串)。 序列实现为可增长的数组,在添加项目时分配内存块。 序列 S 始终用从0到 len(S)-1 的整数索引,并检查其边界。 序列可以由数组构造函数 [] 和数组一起构造,以序列运算符 @ 。 为序列分配空间的另一种方法是调用内置的 newSeq 过程。

    序列可以传递给 开放数组 类型的参数。

    示例:

    1. type
    2. IntArray = array[0..5, int] # an array that is indexed with 0..5
    3. IntSeq = seq[int] # a sequence of integers
    4. var
    5. x: IntArray
    6. y: IntSeq
    7. x = [1, 2, 3, 4, 5, 6] # [] is the array constructor
    8. y = @[1, 2, 3, 4, 5, 6] # the @ turns the array into a sequence
    9.  
    10. let z = [1.0, 2, 3, 4] # the type of z is array[0..3, float]

    数组或序列的下限可以由内置的proc low() 接收,上限由 high() 接收。 长度可以由 len() 接收。序列或开放数组的 low() 总是返回0,因为这是第一个有效索引。 可以使用 add() proc或 & 运算符将元素追加到序列中,并使用 pop() proc删除(并获取)序列的最后一个元素。

    符号 x [i] 可用于访问 x 的第i个元素。

    数组始终是边界检查(静态或运行时)。可以通过编译指示禁用这些检查,或使用 —boundChecks:off 命令行开关调用编译器。

    数组构造函数可以具有可读的显式索引:

    1. type
    2. Values = enum
    3. valA, valB, valC
    4.  
    5. const
    6. lookupTable = [
    7. valA: "A",
    8. valB: "B",
    9. valC: "C"
    10. ]

    如果省略索引,则使用 succ(lastIndex) 作为索引值:

    1. type
    2. Values = enum
    3. valA, valB, valC, valD, valE
    4.  
    5. const
    6. lookupTable = [
    7. valA: "A",
    8. "B",
    9. valC: "C",
    10. "D", "e"
    11. ]