Q Language - Indexación

Una lista se ordena de izquierda a derecha según la posición de sus elementos. El desplazamiento de un elemento desde el principio de la lista se llama suindex. Por lo tanto, el primer elemento tiene un índice 0, el segundo elemento (si hay uno) tiene un índice 1, etc. Una lista de recuenton tiene dominio de índice de 0 a n–1.

Notación de índice

Dada una lista L, el elemento en el índice i es accedido por L[i]. Recuperar un elemento por su índice se llamaitem indexing. Por ejemplo,

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

q)L[0]
99

q)L[1]
98.7e

q)L[4]
"z

Tarea indexada

Los elementos de una lista también se pueden asignar mediante la indexación de elementos. Así,

q)L1:9 8 7

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

Listas 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)

Unirse a listas

La operación más común en dos listas es unirlas para formar una lista más grande. Más precisamente, el operador de combinación (,) agrega su operando derecho al final del operando izquierdo y devuelve el resultado. Acepta un átomo en cualquier argumento.

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

Anidamiento

La complejidad de los datos se construye utilizando listas como elementos de listas.

Profundidad

El número de niveles de anidación de una lista se denomina profundidad. Los átomos tienen una profundidad de 0 y las listas simples tienen una profundidad de 1.

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

q)count l1
3

Aquí hay una lista de profundidad 3 con dos elementos:

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

q)count l5
2

q)count l5[1]
3

Indexación en profundidad

Es posible indexar directamente en los elementos de una lista anidada.

Repeated Item Indexing

La recuperación de un elemento a través de un único índice siempre recupera un elemento superior de una lista anidada.

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

q)L[0]
1

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

Desde el resultado L[1] es en sí mismo una lista, podemos recuperar sus elementos usando un solo índice.

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

Podemos repetir la indexación individual una vez más para recuperar un elemento de la lista anidada más interna.

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

Puedes leer esto como,

Obtenga el elemento en el índice 1 de L, y de él recupere el elemento en el índice 2, y de él recupere el elemento en el índice 0.

Notation for Indexing at Depth

Existe una notación alternativa para la indexación repetida en los constituyentes de una lista anidada. La última recuperación también se puede escribir como,

q)L[1;2;0]
300

La asignación mediante índice también funciona en profundidad.

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

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

Índices elididos

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,

Recupere todos los elementos en la segunda posición de cada lista en el nivel superior.

Interpret L[;;2] as,

Recupere los elementos en la tercera posición para cada lista en el segundo nivel.