【问题标题】:Pass a complete dictionary, both keys and values to a lambda function in q kdb将完整的字典,键和值传递给 q kdb 中的 lambda 函数
【发布时间】:2019-05-23 08:57:22
【问题描述】:

我们希望将完整的字典作为输入传递给 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)

编辑 - 了解问题,这里的问题不是字典只传递值,而是“每个”函数/副词,因为每个都只将值传递给函数。

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

如果我们将完整的字典传递给函数,那么我们可以获得键或值。

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

【问题讨论】:

    标签: kdb


    【解决方案1】:

    如果您的字典值是唯一的,您可以传入字典并应用每个值,然后在函数中您可以使用 ? 查找相应的键,就像这样

    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)
    

    【讨论】:

      【解决方案2】:

      你可以传入整个字典,然后键入它

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多