Langue Q - Dictionnaires

Les dictionnaires sont une extension de listes qui fournissent la base de la création de tableaux. En termes mathématiques, le dictionnaire crée le

"Domaine → Plage"

ou en général (bref) crée

«Clé → valeur»

relation entre les éléments.

Un dictionnaire est une collection ordonnée de paires clé-valeur qui équivaut à peu près à une table de hachage. Un dictionnaire est un mappage défini par une association d'E / S explicite entre une liste de domaines et une liste de plages via une correspondance positionnelle. La création d'un dictionnaire utilise la primitive "xkey" (!)

ListOfDomain ! ListOfRange

Le dictionnaire le plus élémentaire mappe une liste simple à une liste simple.

Entrée (I) Sortie (O)
`Nom `John
`Âge 36
`Sexe «M»
Poids 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

Chercher

La recherche de la valeur de sortie du dictionnaire correspondant à une valeur d'entrée est appelée looking up l'entrée.

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"

Recherche avec Verb @

q)d1:`one`two`three!9 18 27

q)d1[`two]
18

q)[email protected]`two
18

Opérations sur les dictionnaires

Modifier et monter

Comme pour les listes, les éléments d'un dictionnaire peuvent être modifiés via une affectation indexée.

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

Les dictionnaires peuvent être étendus via l'attribution d'index.

q)d[`Height]:"182 Ft"

q)d

Name   | `John
Age    | 35
Sex    | "M"
Weight | 60.3
Height | "182 Ft"

Recherche inversée avec Find (?)

L'opérateur find (?) Est utilisé pour effectuer une recherche inversée en mappant une plage d'éléments à son élément de domaine.

q)d2:`x`y`z!99 88 77

q)d2?77
`z

Dans le cas où les éléments d'une liste ne sont pas uniques, le find renvoie le premier élément qui lui est mappé à partir de la liste de domaines.

Supprimer des entrées

Pour supprimer une entrée d'un dictionnaire, le delete ( _ ) functionest utilisé. L'opérande gauche de (_) est le dictionnaire et l'opérande droit est une valeur clé.

q)d2:`x`y`z!99 88 77

q)d2 _`z

x| 99
y| 88

Un espace est requis à gauche de _ si le premier opérande est une variable.

q)`x`y _ d2           / Deleting multiple entries

z| 77

Dictionnaires de colonnes

Les dictionnaires de colonnes sont les bases de la création de tableaux. Prenons l'exemple suivant -

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

Feuilleter un dictionnaire

L'effet net du retournement d'un dictionnaire de colonnes est simplement l'inversion de l'ordre des indices. Cela revient logiquement à transposer les lignes et les colonnes.

Retourner sur un dictionnaire de colonnes

La transposition d'un dictionnaire est obtenue en appliquant l'opérateur de retournement unaire. Jetez un œil à l'exemple suivant -

q)scores

name  | John Jenny Jonathan
id    | 9   18   27

q)flip scores

  name     id
---------------
  John     9
  Jenny    18
 Jonathan  27

Retournement d'un dictionnaire à colonnes inversées

Si vous transposez un dictionnaire deux fois, vous obtenez le dictionnaire original,

q)scores ~ flip flip scores
1b