Q语言 - 索引



列表按其项目的位置从左到右排序。项目从列表开头起的偏移量称为其索引。因此,第一个项目的索引为 0,第二个项目(如果存在)的索引为 1,依此类推。长度为n的列表的索引范围为0n–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] 解释为:

检索第二层每个列表中第三个位置的项目。

广告