📅  最后修改于: 2020-11-03 06:44:30             🧑  作者: Mango
列表是根据项目的位置从左到右排序的。项目从列表开头的偏移量称为其索引。因此,第一项的索引为0,第二项(如果存在)的索引为1,依此类推。计数n的列表的索引域为0到n–1 。
给定一个列表L ,索引i处的项将由L [i]访问。通过索引检索项目称为项目索引。例如,
q)L:(99;98.7e;`b;`abc;"z")
q)L[0]
99
q)L[1]
98.7e
q)L[4]
"z
列表中的项目也可以通过项目索引进行分配。从而,
q)L1:9 8 7
q)L1[2]:66 / Indexed assignment into a simple list
/ enforces strict type matching.
q)L1
9 8 66
q)l1:(9;8;40;200)
q)l2:(1 4 3; `abc`xyz)
q)l:(l1;l2) / combining the two list l1 and l2
q)l
9 8 40 200
(1 4 3;`abc`xyz)
在两个列表上最常见的操作是将它们连接在一起以形成更大的列表。更准确地说,联接运算符(,)将其右操作数附加到左操作数的末尾并返回结果。它在任何一个参数中都接受一个原子。
q)1,2 3 4
1 2 3 4
q)1 2 3, 4.4 5.6 / If the arguments are not of uniform type,
/ the result is a general list.
1
2
3
4.4
5.6
通过使用列表作为列表项来建立数据复杂性。
列表的嵌套级别数称为其深度。原子的深度为0,简单列表的深度为1。
q)l1:(9;8;(99;88))
q)count l1
3
这是具有两个项目的深度3的列表-
q)l5
9
(90;180;900 1800 2700 3600)
q)count l5
2
q)count l5[1]
3
可以直接索引到嵌套列表的项目中。
重复项目索引
通过单个索引检索项目始终会从嵌套列表中检索最上面的项目。
q)L:(1;(100;200;(300;400;500;600)))
q)L[0]
1
q)L[1]
100
200
300 400 500 600
由于结果L [1]本身是一个列表,因此我们可以使用单个索引来检索其元素。
q)L[1][2]
300 400 500 600
我们可以再次重复单个索引以从最内层的嵌套列表中检索项目。
q)L[1][2][0]
300
你可以这样读
从L获取索引1处的项目,并从索引2中检索项目,并从索引0处获取项目。
深度索引的表示法
还有另一种表示法,用于重复索引嵌套列表的组成部分。最后的检索结果也可以写成
q)L[1;2;0]
300
通过索引进行分配也很深入。
q)L[1;2;1]:900
q)L
1
(100;200;300 900 500 600)
一般清单的排除指标
q)L:((1 2 3; 4 5 6 7); (`a`b`c;`d`e`f`g;`0`1`2);("good";"morning"))
q)L
(1 2 3;4 5 6 7)
(`a`b`c;`d`e`f`g;`0`1`2)
("good";"morning")
q)L[;1;]
4 5 6 7
`d`e`f`g
"morning"
q)L[;;2]
3 6
`c`f`2
"or"
将L [; 1;]解释为
在顶层的每个列表的第二位置检索所有项目。
将L [;; 2]解释为
在第二级检索每个列表在第三位置的项目。