Q Language - Indicizzazione

Un elenco è ordinato da sinistra a destra in base alla posizione dei suoi elementi. L'offset di un elemento dall'inizio dell'elenco è chiamato proprioindex. Pertanto, il primo elemento ha un indice 0, il secondo (se ce n'è uno) ha un indice 1, ecc. Un elenco di conteggion ha un dominio di indice da 0 per n–1.

Notazione dell'indice

Dato un elenco L, l'elemento all'indice i è accessibile da L[i]. Viene chiamato il recupero di un elemento in base al suo indiceitem indexing. Per esempio,

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

q)L[0]
99

q)L[1]
98.7e

q)L[4]
"z

Assegnazione indicizzata

Gli elementi in un elenco possono essere assegnati anche tramite l'indicizzazione degli elementi. Quindi,

q)L1:9 8 7

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

Elenchi da variabili

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)

Partecipare agli elenchi

L'operazione più comune su due elenchi è unirli insieme per formare un elenco più grande. Più precisamente, l'operatore di join (,) aggiunge il suo operando destro alla fine dell'operando sinistro e restituisce il risultato. Accetta un atomo in entrambi gli argomenti.

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

Nidificazione

La complessità dei dati viene creata utilizzando elenchi come elementi di elenchi.

Profondità

Il numero di livelli di nidificazione per un elenco è chiamato profondità. Gli atomi hanno una profondità di 0 e le liste semplici hanno una profondità di 1.

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

q)count l1
3

Ecco un elenco di profondità 3 con due elementi:

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

q)count l5
2

q)count l5[1]
3

Indicizzazione in profondità

È possibile indicizzare direttamente negli elementi di un elenco annidato.

Repeated Item Indexing

Il recupero di un elemento tramite un singolo indice recupera sempre l'elemento più in alto da un elenco nidificato.

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

q)L[0]
1

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

Dal momento che il risultato L[1] è esso stesso una lista, possiamo recuperare i suoi elementi usando un singolo indice.

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

Possiamo ripetere l'indicizzazione singola ancora una volta per recuperare un elemento dall'elenco annidato più interno.

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

Puoi leggerlo come,

Prendi l'elemento all'indice 1 da L, e da esso recupera l'elemento all'indice 2, e da esso recupera l'elemento all'indice 0.

Notation for Indexing at Depth

Esiste una notazione alternativa per l'indicizzazione ripetuta nei componenti di un elenco annidato. L'ultimo recupero può anche essere scritto come,

q)L[1;2;0]
300

L'assegnazione tramite indice funziona anche in profondità.

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

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

Indici elisi

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,

Recupera tutti gli elementi nella seconda posizione di ogni elenco al livello superiore.

Interpret L[;;2] as,

Recuperare gli elementi nella terza posizione per ogni lista al secondo livello.