Q 语言 - 索引
列表按其项目的位置从左到右排序。项目相对于列表开头的偏移量称为其索引。因此,第一项的索引为 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)
加入列表
对两个列表最常见的操作是将它们连接在一起以形成一个更大的列表。更准确地说,连接运算符 (,) 将其右操作数附加到左操作数的末尾并返回结果。它接受任一参数中的一个Atomics。
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
嵌套
数据复杂性是通过使用列表作为列表项来构建的。
深度
列表的嵌套层数称为其深度。Atomics的深度为 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] 解释为,
检索第二级每个列表的第三位置的项目。