Применяет ли отдельная функция уникальный атрибут к списку в q kdb? - PullRequest
0 голосов
/ 13 октября 2019

При выводе функции asc, примененной к списку, мы можем видеть, что вывод состоит из отсортированного атрибута.

q)asc 1 3 11 10 4
`s#1 3 4 10 11

Но при выводе отдельной функции, примененной к списку, мы не можем видеть уникальный атрибутприменяется к списку.

q)distinct 1 3 11 10 4
1 3 11 10 4

Но время, затрачиваемое на поиск элемента в отдельном списке и уникальном списке (список, к которому применяется уникальный атрибут), практически одинаково.

q)n:1000000?1000000
q)d:distinct n
q)\t:100000 d[1021]
45
q)\t:100000 d[632265]
45
q)u:`u#d
q)\t:100000 u[1021]
44
q)\t:100000 u[632265]
48

Значит, отдельная функция применяет уникальный атрибут внутри списка и преобразует его в хеш-таблицу?

1 Ответ

3 голосов
/ 13 октября 2019

distinct не применяет уникальный атрибут к списку. Вы можете увидеть это с помощью функции attr

attr distinct 10?10

ничего не вернется `, когда

attr `u#distinct 10?10

вернет `u

Также ядумаю, что эксперимент может быть неправильным: d[1021] кажется обычной 0 (1) временной операцией получения элемента по индексу. Если вместо этого вы воспользуетесь поиском, вы увидите разницу (цифры на моем ПК):

q)\t:10000 d?770751
85
q)\t:10000 u?770751 
6
...