Linguagem Q - Indexação

Uma lista é ordenada da esquerda para a direita pela posição de seus itens. O deslocamento de um item desde o início da lista é chamado deindex. Assim, o primeiro item tem um índice 0, o segundo item (se houver) tem um índice 1, etc. Uma lista de contagemn tem domínio de índice de 0 para n–1.

Notação de índice

Dada uma lista L, o item no índice i é acessado por L[i]. A recuperação de um item por seu índice é chamadaitem indexing. Por exemplo,

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

q)L[0]
99

q)L[1]
98.7e

q)L[4]
"z

Atribuição Indexada

Os itens em uma lista também podem ser atribuídos por meio da indexação de itens. Portanto,

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 variáveis

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)

Entrando em Listas

A operação mais comum em duas listas é juntá-las para formar uma lista maior. Mais precisamente, o operador de junção (,) anexa seu operando direito ao final do operando esquerdo e retorna o resultado. Ele aceita um átomo em qualquer 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

Nesting

A complexidade dos dados é construída usando listas como itens de listas.

Profundidade

O número de níveis de aninhamento de uma lista é chamado de profundidade. Os átomos têm profundidade 0 e as listas simples têm profundidade 1.

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

q)count l1
3

Aqui está uma lista de profundidade 3 com dois itens -

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

q)count l5
2

q)count l5[1]
3

Indexando em profundidade

É possível indexar diretamente nos itens de uma lista aninhada.

Repeated Item Indexing

A recuperação de um item por meio de um único índice sempre recupera um item superior de uma lista aninhada.

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

q)L[0]
1

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

Desde o resultado L[1] é uma lista, podemos recuperar seus elementos usando um único índice.

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

Podemos repetir a indexação única mais uma vez para recuperar um item da lista aninhada mais interna.

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

Você pode ler isso como,

Obtenha o item no índice 1 de L, e dele recupere o item no índice 2, e dele recupere o item no índice 0.

Notation for Indexing at Depth

Há uma notação alternativa para indexação repetida nos constituintes de uma lista aninhada. A última recuperação também pode ser escrita como,

q)L[1;2;0]
300

A atribuição via índice também funciona em profundidade.

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 os itens na segunda posição de cada lista no nível superior.

Interpret L[;;2] as,

Recupere os itens na terceira posição para cada lista no segundo nível.