Различные результаты переключения на таблицу select и на таблицу с индексным доступом в kdb + - PullRequest
0 голосов
/ 27 января 2020

В сеансе q я создал таблицу с ключами t:

q)/KDB+ 3.6 2018.05.17
q)f:flip (`a`b)!(1 2 3;4 5 6)
q)k:flip (enlist `k)!(enlist 101 102 103)
q)t:k!f;t
k  | a b
---| ---
101| 1 4
102| 2 5
103| 3 6

Затем я попытался сделать запрос, и он дал хорошие результаты:

q)select a,b from t where k=101
a b
---
1 4
q)flip select a,b from t where k=101
a| 1
b| 4
q)flip flip select a,b from t where k=101
a b
---
1 4

Но без select -синтаксиса это выдает ошибку:

q)t[101]
a| 1
b| 4
q)flip t[101]
'rank
  [0]  flip t[101]
       ^

Почему я не могу просто сделать простой flip для того же результата, что и для select тех же данных типы?

q)type flip select a,b from t where k=101
99h
q)type t[101]
99h

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Потому что элементы словаря t[101] не списки, а атомы. Так что перевернуть список атомов не удается.

Сначала будет работать добавление каждого элемента в пустой список.

q)(),/:t[101]
a| 1
b| 4

Не обязательно то, что вы хотите сделать. Для данного словарного вывода решение, которое вы, вероятно, захотите: enlist

q)enlist t[101]
a b
---
1 4
1 голос
/ 27 января 2020

Альтернативным подходом будет поиск с использованием таблицы, а не поиска с использованием атома:

q)t[([]k:(),101)]
a b
---
1 4

Это будет эквивалентно select a,b from t where k=101

...