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