Передайте полный словарь, ключи и значения лямбда-функции в q kdb - PullRequest
2 голосов
/ 23 мая 2019

Мы хотим передать полный словарь в качестве входных данных лямбда-функции, но по умолчанию kdb передает только значения словаря.

Как мы можем получить ключи словаря внутри лямбда-функции?
Мыне может использовать имя словаря в лямбда-выражениях из-за лексической области видимости.

{0N!x}@'(`ab`cd!1 2) / Inside function we get only 1 and 2 and not `ab`cd

Ниже приведено одно решение, но есть ли другое / лучшее решение:

{key key @'x}(`ab`cd!1 2)

РЕДАКТИРОВАТЬ - здесь понимается проблемапроблема не в том, что словарь передает только значения, а в «каждой» функции / наречи, так как каждый передает только значения в функцию.

q)key each (`ab`cd!1 2)
ab| ,0
cd| 0 1

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

q){key x}d
`ab`cd
q){value x}d
1 2

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Если значения вашего словаря уникальны, вы можете передать в словарь и применить каждое значение, а затем в функции вы можете найти соответствующий ключ, используя ?, например,

q){0N!x?y}[d]@'d:`ab`cd!1 2;
`ab
`cd

В противном случае вам просто нужно превратить их в пары:

q){0N!x}@'key[d],'value d:`ab`cd!1 2;
(`ab;1)
(`cd;2)
1 голос
/ 23 мая 2019

Вы можете передать весь словарь и просто набрать его

{key 0N!x}(`ab`cd!1 2)
...