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] 解釋為:

檢索第二層每個列表中第三個位置的專案。

廣告
© . All rights reserved.