【问题标题】:How do I replace items in a list in KDB?如何替换 KDB 列表中的项目?
【发布时间】:2021-12-22 06:54:00
【问题描述】:

假设我有一个列表:

d: 0w 1 2 3

我想在列表中查找并替换 0w。我在想我可以在列表上建立索引来找到它们,返回一个布尔值列表,带有:

d . {x=0w}

但这不起作用。

我做错了什么?如何用更友好的东西替换我的0w

【问题讨论】:

    标签: kdb


    【解决方案1】:

    如果你想找到每个 0w 的索引,你可以这样做

    where 0w=d
    

    然后,如果您想将 d 中的所有实例替换为 4,您可以这样做

    d[where 0w=d]:4f
    

    替换条目时请注意类型错误

    【讨论】:

    • 这太好了,谢谢!一个问题;为什么第二个短语中需要where?做d[0w=d]:4f 确实给了我意想不到的行为,但我不知道为什么......
    • where 返回右侧语句的 True 布尔值的索引。但是,kdb 也会以几乎相同的方式解释 d[0w=d],但这实际上是 d[1000b],因此它为 0 和 1 索引分配了 4f 的值。
    • 使用 where 语句将显示满足之前条件的索引,所以在我们的例子中,只有 0,这就是我们所需要的。仅 0w=d 返回一个布尔列表,即 0 和 1,它只会返回 d 的第一个和第二个条目。
    【解决方案2】:

    对于多个替换,您也可以使用字典:

    q)d:0W 1 2 3
    q)remap:0W 2!0 22
    q)d^remap d
    0 1 22 3
    

    将 0W 重新映射为 0 并将 2 重新映射为 22

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 2021-03-06
      • 1970-01-01
      相关资源
      最近更新 更多