NCL列表¶
NCL列表是唯一一种可以包含不同数据类型或是多种变量组合的类型。 列表中的变量可以有不同的类型,大小和形状。 从列表变量支持的操作来看,它类似于堆栈或队列。
列表变量创建¶
直接定义¶
使用列表定义符 [/ /]
将列表元素囊括其中即可。如
i = (/ (/1,2,3/), (/4,5,6/), (/7,8,9/) /) ; 二维整型数组
x = 5.0 ; 浮点型标量
d = (/100000.d, 283457.23d/) ; 一维双精度数组
s = "abcde" ; 字符串
c = stringtochar("abcde") ; 字符数组
vl = [/i, x, d, c, s/] ; 使用[/.../]创建包含多种类型变量的列表
动态定义¶
另一种定义列表的方式是将其当作堆来对待。
这一特征允许动态地向已经存在的列表变量中增加添加变量。
使用 NewList
函数创建一个空的列表,
后使用 ListPush
向列表中动态添加元素。
x = (/1, 2, 3, 4/)
x@attr = "integer array"
y = (/6., 7., 8., 9./)
y@attr = "float array"
s = (/"one", "two", "three"/)
s@attr = "string array"
my_list = NewList("lifo")
ListPush(my_list, x)
ListPush(my_list, y)
ListPush(my_list, s)
注解
使用ListPush来向列表中增加元素时,新增的元素总是位于列表的头部(顶部)。
列表变量查询¶
ListCount
列表计数, 查询列表元素的个数ListIndex
列表索引, 查询给定元素在列表中的索引,不存在返回-1
列表变量访问¶
对应于列表元素的创建,访问列表也有两种方式。
直接索引和切片¶
与数组索引和切片类似,但是列表元素索引和切片使用中括号 [ ]
。
这种方式需要知道所要索引的元素在列表中的位置。这一操作不会改变列表中的元素。
可以用ListIndex函数来首先获取一个变量的索引,然后使用这一索引来获取对应的元素:
e = my_list[1]
print(e)
idx = ListIndex(my_list, x)
print(idx)
nx = my_list[idx]
print("ori x = " + x)
print("new x = " + nx)
堆元素弹出/队列出列¶
仿照典型的堆栈和队列操作,使用函数 ListPop
来弹出,其还有个别名函数
ListDequeue
。例如:
a = ListPop(my_list) ; 弹出/出列 my_list中的元素
使用ListPop来访问列表元素时,元素本身从列表中移除。 弹出/出列的元素是列表的头部还是尾部基于列表的类型, 有两种类型的列表:
- FIFO (先进先出,类似于计算科学中的队列)
- LIFO (后进先出,类似于堆栈)。
列表类型可以用ListGetType来获取,同时可用ListSetType来改变。范例:
lt = ListGetType(my_list)
ListSetType(my_list, "lifo")
ListSetType(my_list, "fifo")
![../_images/donate2.png](../_images/donate2.png)