Учебники

Q Language — Атрибуты

К спискам, словарям или столбцам таблицы могут быть применены атрибуты. Атрибуты накладывают определенные свойства в списке. Некоторые атрибуты могут исчезнуть при модификации.

Типы атрибутов

Сортировка (`s #)

`s # означает, что список отсортирован в порядке возрастания. Если список явно отсортирован по asc (или xasc), в списке автоматически будет установлен атрибут сортировки.

q)L1: asc 40 30 20 50 9 4

q)L1
`s#4 9 20 30 40 50

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

q)L2:30 40 24 30 2

q)`s#L2
's-fail

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

Расстались (`p #)

`p # означает, что список разделен и идентичные элементы хранятся непрерывно.

Диапазон — это тип int или temporal, имеющий базовое значение типа int, например, годы, месяцы, дни и т. Д. Вы также можете разделить символ, если он перечислен.

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

q)L:`p# 99 88 77 1 2 3

q)L
`p#99 88 77 1 2 3

q)L,:3

q)L
99 88 77 1 2 3 3

Примечание —

  • Атрибут parted не сохраняется под операцией в списке, даже если операция сохраняет разбиение.

  • Атрибут parted следует учитывать, когда число объектов достигает миллиарда, а большинство разделов имеют значительный размер, т. Е. Имеется значительное повторение.

Атрибут parted не сохраняется под операцией в списке, даже если операция сохраняет разбиение.

Атрибут parted следует учитывать, когда число объектов достигает миллиарда, а большинство разделов имеют значительный размер, т. Е. Имеется значительное повторение.

Сгруппированный (`g #)

`g # означает, что список сгруппирован. Создается и поддерживается внутренний словарь, который отображает каждый уникальный элемент на каждый из его индексов, что требует значительного места для хранения. Для списка длины L, содержащего u уникальных элементов размера s , это будет (L × 4) + (u × s) байтов.

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

Атрибут может быть применен к любым типизированным спискам. Поддерживается при добавлении, но теряется при удалении.

q)L: `g# 1 2 3 4 5 4 2 3 1 4 5 6

q)L
`g#1 2 3 4 5 4 2 3 1 4 5 6

q)L,:9

q)L
`g#1 2 3 4 5 4 2 3 1 4 5 6 9

q)L _:2

q)L
1 2 4 5 4 2 3 1 4 5 6 9

Уникальный (`#u)

Применение уникального атрибута (`u #) к списку означает, что элементы списка различны. Знание того, что элементы списка уникальны, значительно ускоряет различие и позволяет q выполнить некоторые сравнения на ранней стадии.

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

q)LU:`u#`MSFT`SAMSUNG`APPLE

q)LU
`u#`MSFT`SAMSUNG`APPLE

q)LU,:`IBM                        /Uniqueness preserved

q)LU
`u#`MSFT`SAMSUNG`APPLE`IBM

q)LU,:`SAMSUNG                    / Attribute lost

q)LU
`MSFT`SAMSUNG`APPLE`IBM`SAMSUNG

Примечание —

  • `u # сохраняется в конкатенациях, которые сохраняют уникальность. Он теряется при удалении и неуникальных конкатенациях.

  • Поиск по спискам `u # осуществляется через хеш-функцию.

`u # сохраняется в конкатенациях, которые сохраняют уникальность. Он теряется при удалении и неуникальных конкатенациях.

Поиск по спискам `u # осуществляется через хеш-функцию.

Удаление атрибутов

Атрибуты можно удалить, применив `#.

Применение атрибутов

Три формата для применения атрибутов:

  • L: `s # 14 2 3 3 9 / Указать при создании списка

  • @ [`.; `L; `s #] / Функциональное применение, т.е. к списку переменных L

    / в пространстве имен по умолчанию (то есть `.) применяются

    / отсортированный атрибут `s #

  • Обновление `s # time из` tab

    / Обновите таблицу (вкладку), чтобы применить

    / атрибут.

L: `s # 14 2 3 3 9 / Указать при создании списка

@ [`.; `L; `s #] / Функциональное применение, т.е. к списку переменных L

/ в пространстве имен по умолчанию (то есть `.) применяются

/ отсортированный атрибут `s #

Обновление `s # time из` tab

/ Обновите таблицу (вкладку), чтобы применить

/ атрибут.

Давайте применим вышеупомянутые три различных формата с примерами.