如何将0h类型列表替换kdb/q表中Included列的值?
问题描述
现有nameTable表如下:
| Name | Included |
|---|---|
| Ann | 1 |
| Bob | 0 |
| Cat | 1 |
通过自定义函数fGetBits提取出Included列的0h类型布尔列表(如1 0 1),现在需要将另一个同类型的列表(比如0 1 1)替换回nameTable的Included列,最终得到目标表:
| Name | Included |
|---|---|
| Ann | 0 |
| Bob | 1 |
| Cat | 1 |
解决方案
在kdb+里有两种简单直接的实现方式:
1. 直接给列赋值
只要新列表的长度和表的行数一致、类型兼容,就能直接给列赋值:
// 定义要替换的新布尔列表 newBits: 0 1 1b // 直接替换Included列 nameTable[`Included] : newBits
执行后nameTable的Included列就会被更新为新值。
2. 使用update语句生成新表
如果需要保留原表副本,或者在链式操作里使用,可以用update语句覆盖原表:
newBits: 0 1 1b nameTable: update Included: newBits from nameTable
注意点
- 必须保证新列表的长度和表的行数完全匹配,不然会触发报错;
- 列表类型要和原列兼容(这里都是0h布尔类型,直接用就行;如果类型不同,得先用
cast转换,比如newBits: cast[0h; 0 1 1])。
内容的提问来源于stack exchange,提问作者mmv456
相关产品推荐
相关产品推荐

