К спискам, словарям или столбцам таблицы могут быть применены атрибуты. Атрибуты накладывают определенные свойства в списке. Некоторые атрибуты могут исчезнуть при модификации.
Типы атрибутов
Сортировка (`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
/ Обновите таблицу (вкладку), чтобы применить
/ атрибут.
Давайте применим вышеупомянутые три различных формата с примерами.