Língua Q - dicionários
Os dicionários são uma extensão das listas que fornecem a base para a criação de tabelas. Em termos matemáticos, o dicionário cria o
“Domínio → intervalo”
ou em geral (resumido) cria
“Chave → valor”
relação entre os elementos.
Um dicionário é uma coleção ordenada de pares chave-valor que é aproximadamente equivalente a uma tabela hash. Um dicionário é um mapeamento definido por uma associação de E / S explícita entre uma lista de domínio e uma lista de intervalo por meio de correspondência posicional. A criação de um dicionário usa a primitiva "xkey" (!)
ListOfDomain ! ListOfRange
O dicionário mais básico mapeia uma lista simples para uma lista simples.
Entrada (I) | Saída (O) |
---|---|
`Nome | `John |
`Idade | 36 |
`Sexo | “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
Olho para cima
Encontrar o valor de saída do dicionário correspondente a um valor de entrada é chamado looking up a entrada.
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"
Pesquisa com Verbo @
q)d1:`one`two`three!9 18 27
q)d1[`two]
18
q)d1@`two
18
Operações em dicionários
Emendar e Upsert
Tal como acontece com as listas, os itens de um dicionário podem ser modificados por meio de atribuição indexada.
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
Os dicionários podem ser estendidos por meio da atribuição de índice.
q)d[`Height]:"182 Ft"
q)d
Name | `John
Age | 35
Sex | "M"
Weight | 60.3
Height | "182 Ft"
Pesquisa reversa com Localizar (?)
O operador find (?) É usado para realizar pesquisa reversa mapeando uma gama de elementos para seu elemento de domínio.
q)d2:`x`y`z!99 88 77
q)d2?77
`z
Caso os elementos de uma lista não sejam únicos, o find retorna o primeiro mapeamento de item da lista de domínio.
Removendo entradas
Para remover uma entrada de um dicionário, o delete ( _ ) functioné usado. O operando esquerdo de (_) é o dicionário e o operando direito é um valor-chave.
q)d2:`x`y`z!99 88 77
q)d2 _`z
x| 99
y| 88
É necessário espaço em branco à esquerda de _ se o primeiro operando for uma variável.
q)`x`y _ d2 / Deleting multiple entries
z| 77
Dicionários de coluna
Dicionários de coluna são básicos para a criação de tabelas. Considere o seguinte exemplo -
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
Invertendo um dicionário
O efeito líquido de inverter um dicionário de colunas é simplesmente inverter a ordem dos índices. Isso é logicamente equivalente a transpor as linhas e colunas.
Flip em um dicionário de coluna
A transposição de um dicionário é obtida aplicando o operador unário flip. Dê uma olhada no seguinte exemplo -
q)scores
name | John Jenny Jonathan
id | 9 18 27
q)flip scores
name id
---------------
John 9
Jenny 18
Jonathan 27
Inverter um dicionário de coluna invertido
Se você transpõe um dicionário duas vezes, obtém o dicionário original,
q)scores ~ flip flip scores
1b