Q Language - Dizionari
I dizionari sono un'estensione di elenchi che forniscono le basi per la creazione di tabelle. In termini matematici, il dizionario crea il file
"Dominio → Intervallo"
o in generale (breve) crea
"Chiave → valore"
relazione tra gli elementi.
Un dizionario è una raccolta ordinata di coppie chiave-valore che è più o meno equivalente a una tabella hash. Un dizionario è una mappatura definita da un'associazione I / O esplicita tra un elenco di domini e un elenco di intervalli tramite corrispondenza posizionale. La creazione di un dizionario utilizza la primitiva "xkey" (!)
ListOfDomain ! ListOfRange
Il dizionario più elementare mappa un semplice elenco in un semplice elenco.
Ingresso (I) | Uscita (O) |
---|---|
`Nome | "John |
`Età | 36 |
"Sesso | "M" |
Peso | 60.3 |
q)d:`Name`Age`Sex`Weight!(`John;36;"M";60.3) / Create a dictionary d
q)d
Name | `John
Age | 36
Sex | "M"
Weight | 60.3
q)count d / To get the number of rows in a dictionary.
4
q)key d / The function key returns the domain
`Name`Age`Sex`Weight
q)value d / The function value returns the range.
`John
36
"M"
60.3
q)cols d / The function cols also returns the domain.
`Name`Age`Sex`Weight
Consultare
Viene chiamata la ricerca del valore di output del dizionario corrispondente a un valore di input looking up l'ingresso.
q)d[`Name] / Accessing the value of domain `Name
`John
q)d[`Name`Sex] / extended item-wise to a simple list of keys
`John
"M"
Cerca con Verbo @
q)d1:`one`two`three!9 18 27
q)d1[`two]
18
q)[email protected]`two
18
Operazioni sui dizionari
Modifica e ribalta
Come per gli elenchi, gli elementi di un dizionario possono essere modificati tramite assegnazione indicizzata.
d:`Name`Age`Sex`Weight! (`John;36;"M";60.3)
/ A dictionary d
q)d[`Age]:35 / Assigning new value to key Age
q)d
/ New value assigned to key Age in d
Name | `John
Age | 35
Sex | "M"
Weight | 60.3
I dizionari possono essere estesi tramite l'assegnazione dell'indice.
q)d[`Height]:"182 Ft"
q)d
Name | `John
Age | 35
Sex | "M"
Weight | 60.3
Height | "182 Ft"
Ricerca inversa con Trova (?)
L'operatore find (?) Viene utilizzato per eseguire la ricerca inversa mappando un intervallo di elementi al suo elemento di dominio.
q)d2:`x`y`z!99 88 77
q)d2?77
`z
Nel caso in cui gli elementi di una lista non siano univoci, il find restituisce il primo elemento mappato ad esso dall'elenco dei domini.
Rimozione di voci
Per rimuovere una voce da un dizionario, il file delete ( _ ) functionsi usa. L'operando sinistro di (_) è il dizionario e l'operando destro è un valore chiave.
q)d2:`x`y`z!99 88 77
q)d2 _`z
x| 99
y| 88
Lo spazio vuoto è richiesto a sinistra di _ se il primo operando è una variabile.
q)`x`y _ d2 / Deleting multiple entries
z| 77
Dizionari di colonna
I dizionari delle colonne sono le basi per la creazione di tabelle. Considera il seguente esempio:
q)scores: `name`id!(`John`Jenny`Jonathan;9 18 27)
/ Dictionary scores
q)scores[`name] / The values for the name column are
`John`Jenny`Jonathan
q)scores.name / Retrieving the values for a column in a
/ column dictionary using dot notation.
`John`Jenny`Jonathan
q)scores[`name][1] / Values in row 1 of the name column
`Jenny
q)scores[`id][2] / Values in row 2 of the id column is
27
Lanciare un dizionario
L'effetto netto di capovolgere un dizionario di colonne è semplicemente invertire l'ordine degli indici. Questo è logicamente equivalente alla trasposizione delle righe e delle colonne.
Capovolgi un dizionario di colonne
La trasposizione di un dizionario si ottiene applicando l'operatore di capovolgimento unario. Dai un'occhiata al seguente esempio:
q)scores
name | John Jenny Jonathan
id | 9 18 27
q)flip scores
name id
---------------
John 9
Jenny 18
Jonathan 27
Capovolgimento di un dizionario a colonne capovolte
Se trasponi due volte un dizionario, ottieni il dizionario originale,
q)scores ~ flip flip scores
1b