将完整的字典(键和值)传递给qkdb中的lambda函数

将完整的字典(键和值)传递给qkdb中的lambda函数,kdb,Kdb,我们希望将完整的字典作为输入传递给lambda函数,但是默认情况下kdb只传递字典的值 如何在lambda函数中获取字典的键? 由于词法作用域,我们无法在lambda中使用字典名 {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) 编辑-理解这个问题,这里的问题不是字典只传递值,而是“each”

我们希望将完整的字典作为输入传递给lambda函数,但是默认情况下kdb只传递字典的值

如何在lambda函数中获取字典的键?
由于词法作用域,我们无法在lambda中使用字典名

{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)
编辑-理解这个问题,这里的问题不是字典只传递值,而是“each”函数/副词,因为each只向函数传递值

q)key each (`ab`cd!1 2)
ab| ,0
cd| 0 1
相反,如果我们将完整的字典传递给函数,那么我们可以得到键或值

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

如果您的字典值是唯一的,您可以传入字典并应用每个值,然后在函数中使用
查找相应的键,如下所示

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)

你可以把整本字典都传进去,只需按一下键

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