Langage Q - Indexation

Une liste est triée de gauche à droite selon la position de ses éléments. Le décalage d'un élément par rapport au début de la liste est appelé sonindex. Ainsi, le premier élément a un index 0, le second élément (s'il y en a un) un index 1, etc.n a un domaine d'index de 0 à n–1.

Notation d'index

Étant donné une liste L, l'élément à l'index i est accédé par L[i]. La récupération d'un élément par son index est appeléeitem indexing. Par exemple,

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

q)L[0]
99

q)L[1]
98.7e

q)L[4]
"z

Affectation indexée

Les éléments d'une liste peuvent également être attribués via l'indexation des éléments. Donc,

q)L1:9 8 7

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

Listes de variables

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)

Rejoindre des listes

L'opération la plus courante sur deux listes est de les joindre pour former une liste plus grande. Plus précisément, l'opérateur de jointure (,) ajoute son opérande droit à la fin de l'opérande gauche et renvoie le résultat. Il accepte un atome dans l'un ou l'autre des arguments.

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

La complexité des données est construite en utilisant des listes comme éléments de listes.

Profondeur

Le nombre de niveaux d'imbrication d'une liste est appelé sa profondeur. Les atomes ont une profondeur de 0 et les listes simples ont une profondeur de 1.

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

q)count l1
3

Voici une liste de profondeur 3 ayant deux éléments -

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

q)count l5
2

q)count l5[1]
3

Indexation en profondeur

Il est possible d'indexer directement dans les éléments d'une liste imbriquée.

Repeated Item Indexing

La récupération d'un élément via un seul index récupère toujours un élément supérieur d'une liste imbriquée.

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

q)L[0]
1

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

Depuis le résultat L[1] est en soi une liste, on peut récupérer ses éléments à l'aide d'un seul index.

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

Nous pouvons répéter l'indexation simple une fois de plus pour récupérer un élément de la liste imbriquée la plus interne.

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

Vous pouvez lire ceci comme,

Obtenez l'élément à l'index 1 à partir de L, et à partir de celui-ci, récupérez l'élément à l'index 2, et à partir de celui-ci, récupérez l'élément à l'index 0.

Notation for Indexing at Depth

Il existe une autre notation pour l'indexation répétée dans les constituants d'une liste imbriquée. La dernière récupération peut également être écrite comme suit:

q)L[1;2;0]
300

L'affectation via l'index fonctionne également en profondeur.

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

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

Indices élidés

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,

Récupérez tous les éléments en deuxième position de chaque liste au niveau supérieur.

Interpret L[;;2] as,

Récupérez les éléments en troisième position pour chaque liste au deuxième niveau.