Q Language - Словари

Словари - это расширение списков, которые служат основой для создания таблиц. С математической точки зрения словарь создает

«Домен → Диапазон»

или вообще (коротко) создает

«Ключ → значение»

отношения между элементами.

Словарь - это упорядоченный набор пар ключ-значение, который примерно эквивалентен хеш-таблице. Словарь - это отображение, определяемое явной ассоциацией ввода-вывода между списком доменов и списком диапазонов через позиционное соответствие. При создании словаря используется примитив "xkey" (!)

ListOfDomain ! ListOfRange

Самый простой словарь отображает простой список в простой список.

Вход (I) Выход (O)
Имя `Джон
`Возраст 36
`Секс «М»
Вес 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

Искать

Поиск выходного значения словаря, соответствующего входному значению, называется looking up вход.

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"

Поиск с помощью Verb @

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

q)d1[`two]
18

q)d1@`two
18

Операции со словарями

Исправить и обновить

Как и в случае со списками, элементы словаря можно изменять с помощью индексированного присвоения.

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

Словари могут быть расширены путем присвоения индексов.

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

q)d

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

Обратный поиск с поиском (?)

Оператор find (?) Используется для выполнения обратного поиска путем сопоставления диапазона элементов с его элементом домена.

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

q)d2?77
`z

Если элементы списка не уникальны, find возвращает первое сопоставление элемента с ним из списка доменов.

Удаление записей

Чтобы удалить запись из словаря, delete ( _ ) functionиспользуется. Левый операнд (_) - это словарь, а правый операнд - значение ключа.

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

q)d2 _`z

x| 99
y| 88

Пробел требуется слева от _, если первый операнд является переменной.

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

z| 77

Словари столбцов

Словари столбцов - это основа для создания таблиц. Рассмотрим следующий пример -

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

Листать словарь

В результате переворачивание словаря столбцов просто меняет порядок индексов на обратный. Это логически эквивалентно перемещению строк и столбцов.

Перевернуть словарь-столбец

Транспонирование словаря достигается применением унарного оператора переворота. Взгляните на следующий пример -

q)scores

name  | John Jenny Jonathan
id    | 9   18   27

q)flip scores

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

Переворот словаря с перевернутой колонкой

Если вы дважды транспонируете словарь, вы получите исходный словарь,

q)scores ~ flip flip scores
1b