首页 > 解决方案 > 计算一组值的前 x 个整数

问题描述

我想从 1 开始计数 Y 的出现次数,直到其后续值为 N。可以在下面找到一个简单的示例表,我添加了一个名为预期输出的附加列以突出显示我正在尝试的内容达到。

tab:([]x:`N`N`Y`N`N`Y`Y`Y`N`N`Y`Y`Y;expected_output:0 0 1 0 0 1 2 3 0 0 1 2 3)

我一直在尝试使用 cut 的想法(假设我可以找到正确的索引)我可以拆分表格,获取每个列表的计数,然后以某种方式将它们拼凑在一起,例如

0 2 3 5 8 10 cut tab

标签: kdb

解决方案


无需扫描即可接近,不像特里那样整洁,但在较大的选项卡上应该更快。

q)update o:{a+r-maxs differ[x]*r:sums a:`Y=x}x from tab
x expected_output o
-------------------
N 0               0
N 0               0
Y 1               1
N 0               0
N 0               0
Y 1               1
Y 2               2
Y 3               3
N 0               0
N 0               0
Y 1               1
Y 2               2
Y 3               3

推荐阅读