Q Sprache - Indizierung

Eine Liste wird von links nach rechts nach der Position ihrer Elemente sortiert. Der Versatz eines Elements vom Anfang der Liste wird als its bezeichnetindex. Somit hat das erste Element einen Index 0, das zweite Element (falls vorhanden) einen Index 1 usw. Eine Liste der Zählungenn hat Indexdomäne von 0 zu n–1.

Indexnotation

Eine Liste gegeben L, das Element am Index i wird zugegriffen von L[i]. Das Abrufen eines Elements anhand seines Index wird aufgerufenitem indexing. Zum Beispiel,

q)L:(99;98.7e;`b;`abc;"z")

q)L[0]
99

q)L[1]
98.7e

q)L[4]
"z

Indizierte Zuordnung

Elemente in einer Liste können auch über die Elementindizierung zugewiesen werden. So,

q)L1:9 8 7

q)L1[2]:66      / Indexed assignment into a simple list
                / enforces strict type matching.
                
q)L1
9 8 66

Listen aus Variablen

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)

Listen beitreten

Die häufigste Operation bei zwei Listen besteht darin, sie zu einer größeren Liste zusammenzufügen. Genauer gesagt hängt der Join-Operator (,) seinen rechten Operanden an das Ende des linken Operanden an und gibt das Ergebnis zurück. In beiden Argumenten wird ein Atom akzeptiert.

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

Nisten

Die Datenkomplexität wird durch die Verwendung von Listen als Listenelemente erstellt.

Tiefe

Die Anzahl der Verschachtelungsebenen für eine Liste wird als Tiefe bezeichnet. Atome haben eine Tiefe von 0 und einfache Listen haben eine Tiefe von 1.

q)l1:(9;8;(99;88))

q)count l1
3

Hier ist eine Liste von Tiefe 3 mit zwei Elementen -

q)l5
9
(90;180;900 1800 2700 3600)

q)count l5
2

q)count l5[1]
3

Indizierung in der Tiefe

Es ist möglich, direkt in die Elemente einer verschachtelten Liste zu indizieren.

Repeated Item Indexing

Durch das Abrufen eines Elements über einen einzelnen Index wird immer ein oberstes Element aus einer verschachtelten Liste abgerufen.

q)L:(1;(100;200;(300;400;500;600)))

q)L[0]
1

q)L[1]
100
200
300 400 500 600

Da das Ergebnis L[1] Ist selbst eine Liste, können wir ihre Elemente mit einem einzigen Index abrufen.

q)L[1][2]
300 400 500 600

Wir können die einzelne Indizierung noch einmal wiederholen, um ein Element aus der innersten verschachtelten Liste abzurufen.

q)L[1][2][0]
300

Sie können dies lesen als,

Holen Sie sich das Element bei Index 1 von L und rufen Sie von dort das Element bei Index 2 und von dort das Element bei Index 0 ab.

Notation for Indexing at Depth

Es gibt eine alternative Notation für die wiederholte Indizierung in die Bestandteile einer verschachtelten Liste. Der letzte Abruf kann auch geschrieben werden als:

q)L[1;2;0]
300

Die Zuordnung über den Index funktioniert auch in der Tiefe.

q)L[1;2;1]:900

q)L
1
(100;200;300 900 500 600)

Elided Indizes

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,

Rufen Sie alle Elemente an der zweiten Position jeder Liste auf der obersten Ebene ab.

Interpret L[;;2] as,

Rufen Sie die Elemente an dritter Stelle für jede Liste auf der zweiten Ebene ab.