Q语言 - 索引

列表按其项目的位置从左到右排序.项目从列表开头的偏移量称为索引.因此,第一项具有索引0,第二项(如果有)具有索引1等.计数列表 n 具有来自 0 的索引域到 n-1 .

索引表示法

给定列表 L ,项目 L [i] 访问索引 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)

加入列表

两个列表上最常见的操作是将它们连接在一起形成一个更大的列表.更确切地说,连接运算符(,)将其右操作数附加到左操作的末尾erand并返回结果.它在任一参数中接受一个原子.

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)

Elided指数

总目录的预期指数

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;] as,

检索所有项目在顶级每个列表的第二个位置.

解释L [;; 2]为,

检索seco中每个列表的第三个位置的项目nd level.