Q语言 - 索引(Indexing)

优质
小牛编辑
134浏览
2023-12-01

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

索引表示法

给定列表L ,索引i处的项目由L[i]访问。 通过索引检索项目称为item indexing 。 例如,

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

Nesting

通过使用列表作为列表项来构建数据复杂性。

Depth

列表的嵌套级别称为深度。 原子的深度为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

深度索引

可以直接索引嵌套列表的项目。

Repeated Item Indexing

通过单个索引检索项目始终从嵌套列表中检索最上面的项目。

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

你可以这样读,

Get the item at index 1 from L, and from it retrieve the item at index 2, and from it retrieve the item at index 0.

Notation for Indexing at Depth

对于重复索引嵌套列表的组成部分,有另一种表示法。 最后一次检索也可以写成,

q)L[1;2;0]
300

通过索引分配也适用于深度。

q)L[1;2;1]:900
q)L
1
(100;200;300 900 500 600)

Elided指数

Eliding Indices for a General List

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"

Interpret L[;1;] as,

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

Interpret L[;;2] as,

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