【问题标题】:Drop a list of keys from a nested table in kdb从 kdb 中的嵌套表中删除键列表
【发布时间】:2021-03-27 16:05:24
【问题描述】:

我正在尝试从嵌套表中删除一组项目;例如给出下表

tree:{[t;col]
    if[1=count col; :![t;();0b;enlist[`name]!col]];
    f:first col;
    c:cols[t] except f;
    r:1_col;
    :?[t;();(enlist `name)!enlist f ;`val`child!((sum;`val);({[r;c;l] tree[flip c!l;r]};enlist r;enlist c;(enlist, c )))]
   };

t:flip`cat`dog`caps`val`val1!flip((cross/)(0 1;`$(5 1)#.Q.a;`$(5 1)#.Q.A;til 5;5+til 5));

// derive tree from aforementioned table
tre:tree[t;`cat`dog`caps]; 

// notably returns correct result indexed by name
.[tre;(0;`child)] enlist[`name]!enlist[`a`b`c]; 

// does not work ???
.[tre;(0;`child);_;enlist[`name]!enlist[`a`b`c]]; 

我曾想过使用以下方法作为解决方案

.[tre;(0;`child);{delete from y where name in x}[`a`b`c]];

我只是想检查是否有更简洁(普遍接受)的方法。比如使用 enlist[name]!enlist[abc];索引来实现这一点。

在 KDB+ 中,应该如何从嵌套树中适当地删除一组给定的索引? 感谢您的指导。

【问题讨论】:

    标签: kdb


    【解决方案1】:

    假设你想要改变这个:

    对于这样的事情,即删除 a、b 和 c 的条目:

    你可以稍微修改你的代码来使用 Over 像这样:

    .[tre;(0;`child);_/;`a`b`c]   
    

    这将根据需要对这些键中的每一个应用删除。

    【讨论】:

      【解决方案2】:

      我喜欢 shree.pat 的解决方案!只需补充一点,如果您稍微修改一下,您的原始尝试可能会起作用:

      q).[tre;(0;`child);{y _ x};flip enlist[`name]!enlist[`a`b`c]]
      name| val  child                                                             ..
      ----| -----------------------------------------------------------------------..
      0   | 1250 (+(,`name)!,`d`e)!+`val`child!(250 250;(+`caps`val`val1`name!(`A`A..
      1   | 1250 (`s#+(,`name)!,`s#`a`b`c`d`e)!+`val`child!(250 250 250 250 250;(+`..
      

      【讨论】:

      • 再次感谢@terrylynch
      猜你喜欢
      • 1970-01-01
      • 2021-12-26
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多