Nim在线运行

版本:
运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,更高效的运行,点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
[更多]
显示目录

数组



数组

一个数组是一种简单的固定长度的容器。数组中的每个元素具有相同的类型。数组的索引类型可以是任何序数类型。

数组可以通过[]构造:

type
  IntArray = array[0..5, int] # an array that is indexed with 0..5
var
  x: IntArray
x = [1, 2, 3, 4, 5, 6]
for i in low(x)..high(x):
  echo(x[i])

标记x[i]是用来访问x的第i个元素。数组访问总是进行边界检查(在编译或者运行时)。这些检查可以禁用通过编译或调用编译器的命令行开关——bound_checks:off command line switch

数组是值类型,像其他nim类型,赋值操作将复制整个数组内容。

内置的len过程返回数组的长度。low(a)返回数组最小有效下标,high(a)返回数组最大有效下标。

type
  Direction = enum
    north, east, south, west
  BlinkLights = enum
    off, on, slowBlink, mediumBlink, fastBlink
  LevelSetting = array[north..west, BlinkLights]
var
  level: LevelSetting
level[north] = on
level[south] = slowBlink
level[east] = fastBlink
echo repr(level)  # --> [on, fastBlink, slowBlink, off]
echo low(level)   # --> north
echo len(level)   # --> 4
echo high(level)  # --> west

嵌套的数组语法在其他语言中是附加更多的括号,因为通常每个维度与其他限制相同的索引类型。在nim中你可以有不同的维度带有不同的索引类型,所以嵌套语法有些不一样。在前面的例子中,一个level被定义为一个数组枚举索引通过另一个枚举类型。我们可以添加以下的代码增加一个light tower类型在高度细分通过访问它们的整形索引:

type
  LightTower = array[1..10, LevelSetting]
var
  tower: LightTower
tower[1][north] = slowBlink
tower[1][east] = mediumBlink
echo len(tower)     # --> 10
echo len(tower[1])  # --> 4
echo repr(tower)    # --> [[slowBlink, mediumBlink, ...more output..
# The following lines don't compile due to type mismatch errors
#tower[north][east] = on
#tower[0][1] = on

注意:内置的built-in过程仅仅只返回数组的第一维的长度。另一种方式定义LightTower表现出更好的嵌套性质,将省略前面的LevelSetting类型的定义,相反将它直接嵌入作为第一维度的类型:

type
  LightTower = array[1..10, array[north..west, BlinkLights]]

这是相当常见的数组从0开始,所以这是一个快捷的语法,指定一个范围从0到指定的下标值减一:

type
  IntArray = array[0..5, int] # an array that is indexed with 0..5
  QuickArray = array[6, int]  # an array that is indexed with 0..5
var
  x: IntArray
  y: QuickArray
x = [1, 2, 3, 4, 5, 6]
y = x
for i in low(x)..high(x):
  echo(x[i], y[i])

开放数组

  • Openarrays只能用于参数。

  • 通常固定大小的数组被证明会过于呆板;过程应该能够处理不同大小的数组。openarray类型允许这样。Openarray总是有一个int型索引从位置0开始。len,low,high操作同样适用于open arrays。任何带有兼容基类型的数组都可以被传递到一个openarray参数,索引类型并不重要。

  • openarray类型不能被嵌套:多维的openarray不被支持因为这很少用到以及它不能有效的进行。
由JSRUN为你提供的Nim在线运行、在线编译工具
        JSRUN提供的Nim在线运行,Nim 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

  • 00:23
注册登录后可减少验证码的弹出,点击前往 注册 | 登录

皮肤:

运行模式:

嵌入代码 iframe嵌入: