KDB+技术问询:如何动态指定列检查所有列符号是否一致?
动态判断指定列符号是否全部相同的kdb+解决方案
没问题,这就帮你把代码改成动态指定列的版本!你原来的硬编码写法已经实现了核心逻辑,只需要调整数据引用方式,就能适配动态列列表的需求。
步骤1:定义动态列列表
先获取你需要处理的目标列,比如取表的最后3列(这就是你提到的dateCols:-3#cols data逻辑):
dateCols: -3#cols data // 也可以换成其他列筛选逻辑,比如`cols data where like[;"d2018*"]`来匹配特定前缀的日期列
步骤2:修改update语句实现动态判断
把原来硬编码的列名替换成动态引用的data[dateCols],就能自动适配你指定的列了:
update validateSign: {x=/} each flip signum data[dateCols] from data
逻辑拆解
data[dateCols]:从表中动态提取你指定的列数据signum:计算每个值的符号(正数返回1,0返回0,负数返回-1)flip:将列格式的数据转成行格式,让每个元素对应一行中所有指定列的符号列表{x=/} each:对每一行的符号列表执行“所有元素是否相等”的判断,返回布尔值(1表示全部符号相同,0表示不同)- 最终将判断结果作为新的布尔列
validateSign添加到原表中
如果想让逻辑更直观,也可以把匿名函数换成{all x = first x},效果完全一致:
update validateSign: {all x = first x} each flip signum data[dateCols] from data
内容的提问来源于stack exchange,提问作者Riley Hun
相关产品推荐
相关产品推荐

